Я пытаюсь получить данные из мыльного 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 был настолько плохо запрограммирован, что чувствителен к порядку параметров, но это, по крайней мере, то, что я хотел бы попробовать. Любая помощь будет оценена по достоинству!


Да, это ограничение приложения логики, но если вы хотите добиться этого, есть альтернатива, и ниже приведен мой дизайн:
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 является нормальным (ожидаемым) поведением в приложении логики).