【问题标题】:Unmarshall SOAP Message using JAXB使用 JAXB 解组 SOAP 消息
【发布时间】:2013-04-30 02:26:52
【问题描述】:

当我在 SOAP 消息下方解组时,我遇到了异常。谁能告诉我怎么了?

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/" xmlns:hios="http://schemas.datacontract.org/2004/07/HIOSCommonObjects">
   <soapenv:Header/>
   <soapenv:Body>
      <tem:ValidIssuersProducts>
         <!--Optional:-->
         <tem:li>
            <!--Zero or more repetitions:-->
            <hios:IssuerProductRequest>
               <!--Optional:-->
               <hios:Issuer>33104</hios:Issuer>
               <!--Optional:-->
               <hios:Product>33104VA001</hios:Product>
            </hios:IssuerProductRequest>
         </tem:li>
      </tem:ValidIssuersProducts>
   </soapenv:Body>
</soapenv:Envelope>

Unmarshalling 代码如下,clazz 是“ValidIssuersProducts 的完全限定名”请求。

public static <T> Object unmarshall(String xml, String clazz) throws ClassNotFoundException, JAXBException {
        JAXBContext context = JAXBContext.newInstance(Class.forName(clazz));
        ByteArrayInputStream input = new ByteArrayInputStream (xml.getBytes());     
        Unmarshaller unmarshaller = context.createUnmarshaller();   
        //JAXBElement<ValidIssuersProducts> obj = (JAXBElement<ValidIssuersProducts>) unmarshaller.unmarshal(new StreamSource(input), ValidIssuersProducts.class);

        ValidIssuersProducts value = (ValidIssuersProducts)unmarshaller.unmarshal(input);
        return  value;

    }

我遇到了以下异常:

javax.xml.bind.UnmarshalException: unexpected element (uri:"http://schemas.xmlsoap.org/soap/envelope/", local:"Envelope"). Expected elements are <{http://tempuri.org/}ArrayOfIssuerProductRequest>,<{http://tempuri.org/}ArrayOfIssuerProductResponse>,<{http://tempuri.org/}IssuerProductRequest>,<{http://tempuri.org/}IssuerProductResponse>,<{http://tempuri.org/}ValidIssuersProducts>,<{http://tempuri.org/}ValidIssuersProductsResponse>
    at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleEvent(UnmarshallingContext.java:642)
    at com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:254)
    at com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:249)
    at com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportUnexpectedChildElement(Loader.java:116)
    at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext$DefaultRootLoader.childElement(UnmarshallingContext.java:1049)
    at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext._startElement(UnmarshallingContext.java:478)
    at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.startElement(UnmarshallingContext.java:459)
    at com.sun.xml.bind.v2.runtime.unmarshaller.InterningXmlVisitor.startElement(InterningXmlVisitor.java:71)
    at com.sun.xml.bind.v2.runtime.unmarshaller.SAXConnector.startElement(SAXConnector.java:148)
    at com.sun.xml.bind.unmarshaller.DOMScanner.visit(DOMScanner.java:239)
    at com.sun.xml.bind.unmarshaller.DOMScanner.scan(DOMScanner.java:122)

【问题讨论】:

    标签: jaxb unmarshalling


    【解决方案1】:

    您需要从与您的映射内容相对应的嵌套元素 ValidIssuersProducts 中解组,而不是从 SOAP Envelope 元素中解组。您可以使用 StAX XMLStreamReader 解析 XML 并前进到正确的元素,然后在此时从 `XMLStreamReader 解组。

    更多信息

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-16
      • 2018-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多