2013-04-30 23 views
5

kullanarak istisna yapıyorum. Birisi bana neyin yanlış olduğunu söyleyebilir mi?Unmarshall SOAP İletisi, SOAP iletisinin altında değilken 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> 

unmarshalling kodu clazz "ValidIssuersProducts tam adını" talebidir aşağıdaki gibidir.

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; 

    } 

ben istisna aşağıda alıyorum:

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) 

cevap

5

Sen eşlenen içeriğin yerine SABUN Envelope elemanına karşılık gelen iç içe eleman ValidIssuersProducts dan unmarshal gerekir. XML'yi ayrıştırmak ve doğru öğeye ilerlemek için StAX XMLStreamReader'u kullanabilir ve bu noktada XMLStreamReader'dan boş bırakabilirsiniz. Ayrıntılı Bilgi İçin