5

当我在 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>

解组代码如下,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)
4

1 回答 1

5

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

了解更多信息

于 2013-04-30T07:59:42.287 回答