Unmarshalling SOAP-сообщения в Java / или просто анализ SOAP-сообщения? - PullRequest
1 голос
/ 13 сентября 2011

Я сталкиваюсь с этой проблемой более одного месяца, поэтому я был бы очень рад вашей помощи, на самом деле я спрашиваю о способе, который может позволить мне проанализировать SOAP-сообщение (запрос), чтобы можно было получить необходимую информацию, такие как информация о безопасности, если таковая имеется, и информация из тела сообщения


Спасибо, что ответили мне, но знаете, что я имею дело с другой проблемой, которая является WS-SecurityPolicy, и я должен окончательно проанализировать xml-файл, подобный этому: <?xml version="1.0" encoding="UTF-8"?>

    <sp:TransportBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
      <wsp:Policy>
        <sp:TransportToken>
          <wsp:Policy>
            <sp:HttpsToken RequireClientCertificate="false"/>
          </wsp:Policy>
        </sp:TransportToken>
        <sp:AlgorithmSuite>
          <wsp:Policy>
            <sp:Basic128/>
          </wsp:Policy>
        </sp:AlgorithmSuite>
        <sp:Layout>
          <wsp:Policy>
            <sp:Lax/>
          </wsp:Policy>
        </sp:Layout>
        <sp:IncludeTimestamp/>
      </wsp:Policy>
    </sp:TransportBinding>
    <sp:SignedSupportingTokens xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
        <wsp:Policy>
            <sp:UsernameToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient" />
      </wsp:Policy>
    </sp:SignedSupportingTokens>

зная, что этот XML-файл называется Policy.xml и содержит правила WS-SecurityPolicy, которые должны присутствовать.

Ответы [ 3 ]

6 голосов
/ 13 сентября 2011

Это зависит от того, что внутри вашего сообщения. Вы пометили свой вопрос с помощью jaxb, что заставляет меня думать, что в сообщении мыла есть данные, сериализованные в xml. Если это так, вы можете использовать JAXB unmarshaller для преобразования вашего сообщения в экземпляр класса Java:

JAXBContext jbc = JAXBContext.newInstance("com.mypackage");
Unmarshaller um = jbc.createUnmarshaller();

JAXBElement<MyClass> element = um.unmarshal(parameterNode, MyClass.class);
MyClass data = element.getValue();
2 голосов
/ 28 июня 2014

Я обнаружил, что этот код отменяется из сообщения SOAPResponse для класса POJO.

    //unmarshalling
    JAXBContext jc = JAXBContext.newInstance(MyPOJO.class);
    Unmarshaller um = jc.createUnmarshaller();
    MyPOJO output = (MyPOJO)um.unmarshal(soapResponse.getSOAPBody().extractContentAsDocument());
1 голос
/ 13 сентября 2011

Я предполагаю, что у вас уже есть объект мыла и вы хотите проанализировать содержимое сообщения.

// assumptions: soapMessage contains the SoapMessage
        final ByteArrayOutputStream baos = new ByteArrayOutputStream();
        soapMessage.writeTo(baos);
        final InputSource inputSource = new InputSource(new StringReader(
            new String(baos.toByteArray())));
        final DocumentBuilderFactory dbFactory = DocumentBuilderFactory
            .newInstance();
        final DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
        final Document doc = dBuilder.parse(inputSource);
        doc.normalize();
// after this use Xpath to process the soapMessage

если у вас есть мыльное сообщение в виде строки, вы можете начать с создания объекта Document, используя строку.

...