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)