【问题标题】:Unmarshalling SOAP Messages to java / or simply parsing SOAP message?将 SOAP 消息解组到 java / 或只是解析 SOAP 消息?
【发布时间】:2011-11-16 04:07:09
【问题描述】:

我面临这个问题一个多月了,所以我会很高兴得到你的帮助,事实上我正在询问一种可以让我解析 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 的规则,该规则必须存在。

【问题讨论】:

标签: java soap jaxb unmarshalling saaj


【解决方案1】:

这取决于您的信息内容。你用jaxb 标记了你的问题,这让我觉得你在soap 消息中有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】:

    我发现这段代码可以从 SOAPResponse 消息解组到 POJO 类,希望对您有所帮助。

        //unmarshalling
        JAXBContext jc = JAXBContext.newInstance(MyPOJO.class);
        Unmarshaller um = jc.createUnmarshaller();
        MyPOJO output = (MyPOJO)um.unmarshal(soapResponse.getSOAPBody().extractContentAsDocument());
    

    【讨论】:

      【解决方案3】:

      我猜你已经有一个soap对象并且想要解析消息的内容。

      // 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 对象开始。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多