Мне очень трудно создать WSDL-клиент из-за искаженного определения WSDL, созданного с помощью Apache Axis версии 1.4 кем-то другим.
Позвольте мне показать вам шаги, которые я выполняю:
Сначала я загружаю свою конечную точку WSDL http://xxxxx/uglySoap?wsdl на SOAP IU. Программа автоматически генерирует следующий запрос:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:bal="http://xxxx/uglySoap.xsd">
<soapenv:Header/>
<soapenv:Body>
<bal:CreditRequest>
<bal:MSISDN>?</bal:MSISDN>
<bal:amountToCredit>?</bal:amountToCredit>
<!--Optional:-->
<bal:reason>?</bal:reason>
<bal:transId>?</bal:transId>
</bal:CreditRequest>
</soapenv:Body>
</soapenv:Envelope>
Этот запрос неверен, потому что в нем отсутствует заголовок (где вы указываете учетные данные). В пользовательском интерфейсе SOAP это не проблема, я могу добавить недостающий текст вручную, и он будет работать идеально.
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:msp="http:xxxxxx/uglySoap.xsd" xmlns:bal="http://xxxxxx/uglySoap.xsd">
<soapenv:Header>
<msp:messageHeader>
<msp:trackingMessageHeader>
<msp:messageId>xxx</msp:messageId>
<msp:carrierId>xxx</msp:carrierId>
<msp:userId>xxxx</msp:userId>
<msp:password>xxxx</msp:password>
</msp:trackingMessageHeader>
</msp:messageHeader>
</soapenv:Header>
<!--from here is the same thing as before-->
<soapenv:Body>
<bal:CreditRequest>
<bal:MSISDN>xxxxx</bal:MSISDN>
<bal:amountToCredit>xxxx</bal:amountToCredit>
<!--Optional:-->
<bal:reason>xxxx</bal:reason>
<bal:transId>xxxx</bal:transId>
</bal:CreditRequest>
</soapenv:Body>
</soapenv:Envelope>
Настоящая боль начинается, когда я пытаюсь использовать веб-службу на Java. Eclipse CXF 2.7.9. инструмент без проблем импортирует испорченную версию wsdl, но вызывать его методы бесполезно, поскольку они хорошо ... испорчены.
JAVA ОШИБКА: кредит метода (CreditRequest, MessageHeader) не определен для типа BalanceManagement. Действительно чувак? Вы уже знали, что это должно произойти.
Итак ...
- Я попытался вручную отредактировать записи @WebMethod, чтобы включить недостающие функции. Это не удалось.
- Я пытался (несколько часов) создать локальную версию уродливого Soap .wsdl, включить отсутствующий заголовок и затем импортировать его в Java, но он выдает crypti c org. apache .cxf.interceptor.ClientFaultConverter.processFaultDetail ошибки.
- Я даже пытался переключиться на Axis, но безрезультатно.
Пожалуйста, есть ли какое-нибудь решение для Java, где я мог бы просто пробить свой SOAP запрос, URL, и получить ответ в виде файла. XML (или даже в виде обычного текста, нет проблем!), как это делает SOAP UI?
Спасибо!