2016-06-15 26 views
0

Ich bekomme XML-Antwort von Soap Webservice, aber wenn ich bin unmarshall es werde ich null.wenn ich es auf der Konsole drucken druckt es ordnungsgemäß, aber wenn ich es marshall es druckt Null.Parsing durch SOAPMessage Antwort erhalten Null

Unten finden Sie den Code für unmarshall nach

private static void printSOAPResponse(SOAPMessage soapResponse) 
    { 
     TransformerFactory transformerFactory = TransformerFactory.newInstance(); 
     Transformer transformer = transformerFactory.newTransformer(); 
     Source sourceContent = soapResponse.getSOAPPart().getContent(); 
     System.out.print("\nResponse SOAP Message = "); 
     StreamResult result = new StreamResult(System.out); 
     transformer.transform(sourceContent, result); 
     XMLInputFactory xif = XMLInputFactory.newFactory(); 
     //StreamSource xml = new StreamSource(soapResponse.toString()); 
     XMLStreamReader xsr = xif.createXMLStreamReader(sourceContent); 
     xsr.nextTag(); 
     while(!xsr.getLocalName().equals("HelpDesk_Query_ServiceResponse")) { 
      xsr.nextTag(); 
     } 

    JAXBContext jc = JAXBContext.newInstance(HelpDesk_Query_ServiceResponse.class); 
    Unmarshaller unmarshaller = jc.createUnmarshaller(); 
    JAXBElement<HelpDesk_Query_ServiceResponse> jb = unmarshaller.unmarshal(xsr, HelpDesk_Query_ServiceResponse.class); 
    xsr.close(); 
    HelpDesk_Query_ServiceResponse response = jb.getValue(); 

    System.out.println(response.City); 
    System.out.println(response.Organization); 
} 

Unten Antwort bekommen mein Java pojo Klasse

@XmlAccessorType(XmlAccessType.FIELD) 
public class HelpDesk_Query_ServiceResponse { 
    @XmlAttribute 
    String Assigned_Group; 
    @XmlAttribute 
    String Organization; 
    @XmlAttribute 
    String City; 
//other attribute and their Getter and setter 
} 

Diese Linie transformer.transform (sourceContent, result); druckt die Antwort in der Konsole wie diese

<?xml version="1.0" encoding="UTF-8"?> 
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
<soapenv:Body> 
    <ns0:HelpDesk_Query_ServiceResponse xmlns:ns0="urn:XXXX_HPD_IncidentInterface_WS__XXXXX" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
     <ns0:Assigned_Group>TIM-CSDWINDOWS-ADMIN</ns0:Assigned_Group> 
     <ns0:Assigned_Group_Shift_Name/> 
     <ns0:City>HYDERABAD</ns0:City> 
     <ns0:Organization>XXX_TIM</ns0:Organization> 
     <ns0:Priority>Medium</ns0:Priority> 
     <ns0:Product_Model_Version/> 
     <ns0:Product_Name/> 
     <ns0:HPD_CI_ReconID/> 
     <ns0:z1D_CI_FormName/> 
    </ns0:HelpDesk_Query_ServiceResponse> 
</soapenv:Body> 

aber wenn ich entordnen und versuchen, Stadt und Organisation Wert drucken druckt es null. bitte einige helfen mir dabei.

Antwort

0

Sie haben zwei Probleme, Namespaces und mithilfe von Attributen anstelle von Elementen:

Grundsätzlich sollten Sie verwenden:

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(namespace="urn:XXXX_HPD_IncidentInterface_WS__XXXXX") 
public class HelpDesk_Query_ServiceResponse { 
    @XmlElement(namespace="urn:XXXX_HPD_IncidentInterface_WS__XXXXX") 
    String Assigned_Group; 
    @XmlElement(namespace="urn:XXXX_HPD_IncidentInterface_WS__XXXXX") 
    String Organization; 
    @XmlElement(namespace="urn:XXXX_HPD_IncidentInterface_WS__XXXXX") 
    String City; 
//other attribute and their Getter and setter 
}