2013-04-30 26 views
5

khi tôi unrmarshall bên dưới thông điệp SOAP, tôi đang nhận được ngoại lệ. Ai đó có thể cho tôi biết có gì sai không?Unmarshall SOAP Message sử dụng JAXB

<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> 

Mã không sửa đổi như sau, clazz là "tên đủ điều kiện của ValidIssuersProducts" yêu cầu.

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; 

    } 

Tôi nhận được dưới đây ngoại lệ:

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) 

Trả lời

5

Bạn cần phải unmarshal từ các yếu tố lồng nhau ValidIssuersProducts tương ứng với nội dung bản đồ của bạn thay vì SOAP Envelope phần tử. Bạn có thể sử dụng một StAX XMLStreamReader để phân tích cú pháp XML và tiến tới phần tử chính xác và sau đó unmarshal từ `XMLStreamReader tại điểm đó.

Để biết thêm thông tin

Các vấn đề liên quan