当我在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)
答案 0 :(得分:5)
您需要从嵌套元素ValidIssuersProducts
解组,该元素对应于您的映射内容而不是SOAP Envelope
元素。您可以使用StAX XMLStreamReader
来解析XML并前进到正确的元素,然后在那时从`XMLStreamReader解组。
了解更多信息