Неверный XML-запрос на услугу калькулятора
Я полностью новичок в axis2c, и я только что скачал и распаковал axis2c 1.6 для Windows (бинарный выпуск). Я следовал инструкциям по установке и успешно запустил axis2_http_server. Попытка получить доступ к WSDL службы Calculator работает нормально, но любой вызов метода add службы возвращает "недопустимый XML в запросе", а также тот же текст отображается в окне консоли, где выполняется axis2_http_server. Я также попробовал soapUI. Показанный запрос:
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:typ="http://ws.apache.org/axis2/services/Calculator/types">
<soapenv:Header/>
<soapenv:Body>
<typ:add>
<param_1>1.0</param_1>
<param_2>1.0</param_2>
</typ:add>
Ответ
<soapenv:Fault>
<faultcode>soapenv:Sender</faultcode>
<faultstring>Invalid XML format in request</faultstring>
</soapenv:Fault>
Проблема оформлена в в calc.c (function axis2_calc_add())
, гдеseq_node = axiom_node_get_first_child(complex_node, env);
возвращается NULL
,
1 ответ
Пример сервиса калькулятора имеет несколько проблем, которые мешают ему работать.
Во-первых, реализация add
операция недействительна, она ожидает такой запрос (здесь только содержимое тела мыла):
<typ:add>
<complex_node>
<seq_node>
<param_1>1</param_1>
<param_2>2</param_2>
</seq_node>
</complex_node>
</typ:add>
Похоже, кто-то совершил этот код по ошибке.
Во-вторых, код, реализованный в службе калькулятора, не позволяет использовать пробелы между элементами запроса. Он принимает любой первый узел, надеясь, что это элемент, но не работает, потому что принимает текстовый узел между элементами.
Чтобы запустить этот пример без изменения службы:
использовать один из
sub
,div
,mul
операции.удалите все пробелы в элементе запроса следующим образом:
<typ:sub><param_1>3</param_1><param_2>2</param_2></typ:sub>
Тогда вы сможете позвонить в сервис.
Если вы хотите увидеть полностью работающий калькулятор, вы можете скомпилировать Axis2/C из неофициального проекта axis2 (или установить его из двоичного архива).
Или вы можете применить эти изменения к исходному исходному коду и перекомпилировать его.