2016-11-15 41 views
1

我有下面的肥皂響應標題,我想從中解析使用JAXB元素的值。肥皂響應標題元素通過JAXB解析

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:com="http://example.com" xmlns:ass="http://example.com"> 
    <soapenv:Header> 
     <com:HeaderResponse> 
     <com:RequestId>1234</com:RequestId> 
     </com:HeaderResponse> 
    </soapenv:Header> 
    <soapenv:Body> 
     ...................... 
    </soapenv:Body> 
</soapenv:Envelope> 

我嘗試了很多選項,但無法獲得RequestID元素的值。其中一個方法是:

package com.example.model; 

import javax.xml.bind.annotation.XmlAccessType; 
import javax.xml.bind.annotation.XmlAccessorType; 
import javax.xml.bind.annotation.XmlElement; 
import javax.xml.bind.annotation.XmlRootElement; 
import javax.xml.bind.annotation.XmlType; 

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "HeaderResponse", propOrder = { 
    "RequestId" 
}) 
@XmlRootElement(name = "HeaderResponse") 
public class Header { 
    @XmlElement(name = "RequestId",required = true) 
    protected String RequestId; 

    public String getRequestId() { 
     return RequestId; 
    } 

    public void setRequestId(String RequestId) { 
     this.RequestId = RequestId; 
    } 
} 

調用代碼

JAXBContext jaxbContext = JAXBContext.newInstance(Header.class); 
      SOAPMessage requestMessage = MessageFactory.newInstance().createMessage(null, 
        new ByteArrayInputStream(file.getBytes()));; 
      SOAPHeader reqheader = requestMessage.getSOAPHeader(); 
      Iterator<SOAPHeaderElement> itr = reqheader.examineAllHeaderElements(); 
        while (itr.hasNext()) { 
         SOAPHeaderElement ele = itr.next(); 

         Header headerType=(Header)jaxbContext.createUnmarshaller().unmarshal(ele); 
         System.out.println(headerType.getRequestId()); 
        } 

這我得到異常:

javax.xml.bind.UnmarshalException: unexpected element (uri:"http://example.com", local:"HeaderResponse"). Expected elements are <{}HeaderResponse> 
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleEvent(Unknown Source) 
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportError(Unknown Source) 
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportError(Unknown Source) 
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportUnexpectedChildElement(Unknown Source) 
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext$DefaultRootLoader.childElement(Unknown Source) 
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext._startElement(Unknown Source) 
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext.startElement(Unknown Source) 
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.InterningXmlVisitor.startElement(Unknown Source) 
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.SAXConnector.startElement(Unknown Source) 
at com.sun.xml.internal.bind.unmarshaller.DOMScanner.visit(Unknown Source) 
at com.sun.xml.internal.bind.unmarshaller.DOMScanner.scan(Unknown Source) 
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(Unknown Source) 
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(Unknown Source) 
at com.example.model.XYZ.parseAndPrintXMLTagValues(XYZ.java:69) 
at com.example.main.RunJaxB.main(RunJaxB.java:18) 

回答