Как изменить порядок, в котором параметры располагаются в теле сообщения, на API-интерфейс soap из пользовательского соединителя портала Azure

Я пытаюсь получить данные из мыльного API. С большинства конечных точек все идет без сучка и задоринки. Я работаю на лазурном портале и настроил настраиваемый соединитель. Приложение логики, которое я создаю, использует этот настраиваемый соединитель. Однако одна из конечных точек не может обработать мой запрос, выдавая ошибку 500 со следующим телом ошибки:

"Server was unable to read request. -> There is an error in XML document (1, 254). -> Input string was not in a correct format."

Теперь я не вижу XML-запрос, отправленный API-интерфейсу мыла, но я вижу необработанный ввод JSON, который преобразуется в xml с помощью настраиваемого соединителя. Выглядит это так (за исключением некоторых неуместных оберток):

"body": {
"getMutaties": {
    "SecurityCode2": "XXXXX",
    "SessionID": "XXXXX",
    "cFilter": {
         "mutatieNr": XXX
    }
    }
}

Единственная разница, которую я смог найти между этим и другим вызовом, заключается в том, что cFilter находится после деталей безопасности. Теперь я пытался, я пытался до пота и слез, но я не могу изменить порядок параметров, чтобы он выглядел так:

"body": {
"getMutaties": {
    "cFilter": {
         "mutatieNr": XXX
    },
    "SecurityCode2": "XXXXX",
    "SessionID": "XXXXX"
    }
}

Я был бы удивлен, если бы API был настолько плохо запрограммирован, что чувствителен к порядку параметров, но это, по крайней мере, то, что я хотел бы попробовать. Любая помощь будет оценена по достоинству!

Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
0
72
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Да, это ограничение приложения логики, но если вы хотите добиться этого, есть альтернатива, и ниже приведен мой дизайн:

Design:

Ввод данных из SOAP AI непосредственно в http-запрос:

Firstly parse json :

Schema:

{
    "type": "object",
    "properties": {
        "body": {
            "type": "object",
            "properties": {
                "getMutaties": {
                    "type": "object",
                    "properties": {
                        "cFilter": {
                            "type": "object",
                            "properties": {
                                "mutatieNr": {
                                    "type": "string"
                                }
                            }
                        },
                        "SecurityCode2": {
                            "type": "string"
                        },
                        "SessionID": {
                            "type": "string"
                        }
                    }
                }
            }
        }
    }
}

Затем инициализируйте строковую переменную со значением, как показано ниже, а затем для проверки вы можете использовать compose::

Output:

Code view :

{
    "definition": {
        "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
        "actions": {
            "Compose": {
                "inputs": "@variables('var')",
                "runAfter": {
                    "Initialize_variable": [
                        "Succeeded"
                    ]
                },
                "type": "Compose"
            },
            "Initialize_variable": {
                "inputs": {
                    "variables": [
                        {
                            "name": "var",
                            "type": "string",
                            "value": "{\n\"body\": {\n\"getMutaties\": {\n    \"cFilter\": {\n         \"mutatieNr\": @{body('Parse_JSON')?['body']?['getMutaties']?['cFilter']?['mutatieNr']}\n    },\n    \"SecurityCode2\": @{body('Parse_JSON')?['body']?['getMutaties']?['SecurityCode2']},\n    \"SessionID\": @{body('Parse_JSON')?['body']?['getMutaties']?['SessionID']}\n    }\n}}"
                        }
                    ]
                },
                "runAfter": {
                    "Parse_JSON": [
                        "Succeeded"
                    ]
                },
                "type": "InitializeVariable"
            },
            "Parse_JSON": {
                "inputs": {
                    "content": "@triggerBody()",
                    "schema": {
                        "properties": {
                            "body": {
                                "properties": {
                                    "getMutaties": {
                                        "properties": {
                                            "SecurityCode2": {
                                                "type": "string"
                                            },
                                            "SessionID": {
                                                "type": "string"
                                            },
                                            "cFilter": {
                                                "properties": {
                                                    "mutatieNr": {
                                                        "type": "string"
                                                    }
                                                },
                                                "type": "object"
                                            }
                                        },
                                        "type": "object"
                                    }
                                },
                                "type": "object"
                            }
                        },
                        "type": "object"
                    }
                },
                "runAfter": {},
                "type": "ParseJson"
            }
        },
        "contentVersion": "1.0.0.0",
        "outputs": {},
        "parameters": {},
        "triggers": {
            "manual": {
                "inputs": {
                    "schema": {}
                },
                "kind": "Http",
                "type": "Request"
            }
        }
    },
    "parameters": {}
}

Инициализация его строковой переменной является подсказкой (поскольку переупорядочение json является нормальным (ожидаемым) поведением в приложении логики).

Другие вопросы по теме