Как получить SOAPAction из WSDL с использованием Java - PullRequest
4 голосов
/ 05 ноября 2011

Я использую пакет javax.wsdl для анализа файла wsdl.

Я не уверен, как получить SOAPAction операции из файла wsdl.

Я могу получить объект javax.wsdl.Operation, используя WSDLFactory. Но я не нашел способа получить SOAPAction этой операции.

У кого-нибудь есть идеи, как его получить?

Спасибо, Maviswa

1 Ответ

9 голосов
/ 06 ноября 2011

Вам нужно получить ExtensibilityElement, который соответствует SOAPOperation, и извлечь из него SOAPAction.

Давайте возьмем простой WSDL в качестве примера из веб-службы TempConvert и извлечем действие SOAP из операции CelsiusToFahrenheit; Я собираюсь после этой части:

<wsdl:binding name="TempConvertSoap" type="tns:TempConvertSoap">
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http"/>
    <wsdl:operation name="FahrenheitToCelsius">
      <soap:operation soapAction="http://tempuri.org/FahrenheitToCelsius" style="document"/>
      <wsdl:input>
        <soap:body use="literal"/>
      </wsdl:input>
      <wsdl:output>
        <soap:body use="literal"/>
      </wsdl:output>
    </wsdl:operation>
    <wsdl:operation name="CelsiusToFahrenheit">
      <soap:operation soapAction="http://tempuri.org/CelsiusToFahrenheit" style="document"/>
      <wsdl:input>
        <soap:body use="literal"/>
      </wsdl:input>
      <wsdl:output>
        <soap:body use="literal"/>
      </wsdl:output>
    </wsdl:operation>
  </wsdl:binding>

Следующий код печатает значение действия SOAP для операции CelsiusToFahrenheit:

WSDLFactory factory = WSDLFactory.newInstance();
WSDLReader reader = factory.newWSDLReader();
Definition definition = reader.readWSDL("http://www.w3schools.com/webservices/tempconvert.asmx?wsdl");
Binding binding = definition.getBinding(new QName("http://tempuri.org/", "TempConvertSoap"));
BindingOperation operation = binding.getBindingOperation("CelsiusToFahrenheit", null, null); 
List extensions = operation.getExtensibilityElements();
if (extensions != null) {
    for (int i = 0; i < extensions.size(); i++) {
        ExtensibilityElement extElement = (ExtensibilityElement) extensions.get(i); 

        // ....

        if (extElement instanceof SOAPOperation) {
            SOAPOperation soapOp = (SOAPOperation) extElement;
            System.out.println(soapOp.getSoapActionURI());
        }

        // ....
    }
}

Вывод такой:

http://tempuri.org/CelsiusToFahrenheit
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...