Я решил опубликовать свой собственный ответ здесь, потому что я потерял несколько часов на это, и я думаю, что, хотя принятый ответ очень хорош и направил меня в правильном направлении (да, он получил голосование) , это не было достаточно подробно, чтобы объяснить, что случилось с моим заявлением, по крайней мере, в моем случае.
Я использую модуль BPEL в OpenESB 2.2, и тестовый пример моего составного приложения не удался со следующей ошибкой:
Caused by: System.Web.Services.Protocols.SoapException: Server did not recognize the value of HTTP Header SOAPAction: .
Проведя некоторое исследование, я заметил, что внешний WSDL имеет все подсказки, необходимые для решения этой проблемы, например, я использую следующий веб-сервис для проверки номера кредитной карты с помощью оркестровки веб-сервисов:
http://www.webservicex.net/CreditCard.asmx?WSDL
Если вы проверите элементы <wsdl:operation
, вы увидите, что в них четко указано soapAction
для этой операции:
<wsdl:binding name="CCCheckerSoap" type="tns:CCCheckerSoap">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="ValidateCardNumber">
<soap:operation soapAction="http://www.webservicex.net/ValidateCardNumber" style="document"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
...
Но, как только вы создадите составное приложение и создадите проект с BPEL, который вызывает эту внешнюю службу WSDL, по какой-то причине (ошибка?) XML-код привязки сборки службы приложений (CASA) создается с пустым soapAction
параметр:
<binding name="casaBinding1" type="ns:CCCheckerSoap">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="ValidateCardNumber">
<soap:operation soapAction="" style="document"/>
<input>
<soap:body use="literal"/>
</input>
После того, как вы скопируете правильный soapAction (http://www.webservicex.net/ValidateCardNumber) в этот параметр), тестовый пример приложения будет корректно возвращать ожидаемый ответ Soap.
<soap:operation soapAction="http://www.webservicex.net/ValidateCardNumber" style="document"/>
Итак, это более конкретное решение, которое я решил задокументировать на основе информации, найденной в этом сообщении: http://bluebones.net/2003/07/server-did-not-recognize-http-header-soapaction/.
Это означает (по крайней мере, в моем случае), что вы обращаетесь к веб-сервису
с SOAP и , передавая параметр SOAPAction в HTTP-запросе
это не соответствует ожидаемому сервису .