Apache Axis WSDL2Java ошибка - отсутствует элемент <soap: fault>
Мы интегрируем сторонние веб-сервисы SOAP в наше приложение. WSDL используется с инструментом SOAPUI, где примеры запросов и ответов работали нормально.
Когда мы пытаемся интегрироваться с Apache Axis 1.3, где мы пробовали WSDL2JAVA с WSDL. Мы получили следующую ошибку
java.io.IOException: ОШИБКА: отсутствует элемент inFault "serviceFault" в операции "serviceFault", в привязке saveRegistration по адресу org.apache.axis.wsdl.symbolTable.SymbolTable.faultsFromSOAPFault(SymbolTable.java:2858) в org.apache.axis.wsdl.symbolTable.SymbolTable.populateBindings(SymbolTable.java:2549) при org.apache.axis.wsdl.symbolTable.SymbolTable.populate(SymbolTable.java:744) в org.apache.axis.wsdl.symbolTable.SymbolTable.add(SymbolTable.java:543) в org.apache.axis.wsdl.symbolTable.SymbolTable.populate(SymbolTable.java:518) в org.apache.axis.wsdl.symbolTable.SymbolTable.populate(SymbolTable.java:495 at) org.apache.axis.wsdl.gen.Parser$WSDLRunnable.run(Parser.java:361) в java.lang.Thread.run(неизвестный источник)
Кто-нибудь уже сталкивался с этой проблемой и решил?
2 ответа
Я считаю, что JIRA открыта для этого.
Описание:
Если у вас есть связывание мыла 1.2 с ошибкой мыла, элемент ошибки извлекается неправильно, что приводит к ошибке
ERROR: Missing <soap:fault> element inFault "..." in operation "...", in binding ...
Их временная рекомендация - добавить строку кода и перекомпилировать Axis1... Nahh.
Лично я только что скачал файл wsdl (это сервис Axis 2 и у меня есть клиент Axis 1.5) и отредактировал пространство имен для всех следующих строк из:
<wsdl:fault name="Exception">
<soap12:fault use="literal" name="Exception"/>
</wsdl:fault>
чтобы:
<wsdl:fault name="Exception">
<soap:fault use="literal" name="Exception"/>
</wsdl:fault>
Как предлагается здесь.
Однако обновление до Axis2 является лучшим долгосрочным решением. После решения этой проблемы я обнаружил еще больше ошибок в коде, который сгенерировал WSDL2JAVA.
Я решил эту проблему, изменив пространство имен XML, как показано ниже:
Изменить это
xmlns: soap12 = "http://schemas.xmlsoap.org/wsdl/soap12/"
в
xmlns: soap12 = "http://schemas.xmlsoap.org/wsdl/soap/"
только 12 в конце удаляется.