0
我正在使用具有soap消息頭的web服務,如下所示。使用jaxb獲取soap消息頭Unmarshaller
<SOAP-ENV:Header>
<MessageHeader xmlns:cnr="http://testservice.com/Namespaces/Types/Public/DataModel.xsd" xmlns="http://testservice.com/Namespaces/Types/Public/MessageHeader.xsd">
<CommonMessageHeader>
<cnr:version>v109</cnr:version>
<cnr:dateTimeStamp>2016-08-31T14:37:03Z</cnr:dateTimeStamp>
<cnr:referenceId>cc7b-429c-a2f5-1f61dcb94e85</cnr:referenceId>
</CommonMessageHeader>
<SecurityMessageHeader>
<cnr:userName>dtv_directvcom</cnr:userName>
<cnr:userPassword>dtv_directvcom0624</cnr:userPassword>
</SecurityMessageHeader>
</MessageHeader>
</SOAP-ENV:Header>
我試圖得到迴應,但面對下面error.I我得到正確的響應(用了SoapUI相比)之後,這種肥皂頭到Java對象轉換。
unexpected element (uri:"http://testservice.com/Namespaces/Profile/Types/Public/MessageHeader.xsd", local:"MessageHeader").
Expected elements are <{http://testservice.com/Namespaces/Types/Public/SoapFaultDetails.xsd}ApplicationException>,
<{http://testservice.com/Namespaces/Container/Public/ServiceRequest.xsd}ServiceRequest>,
<{http://testservice.com/Namespaces/Container/Public/ServiceResponse.xsd}ServiceResponse>,
<{http://testservice.com/Namespaces/Types/Public/MessageHeader.xsd}MessageHeader>
下面是使用的代碼片段。
NodeList nodeList = soapMessage.getSOAPHeader().getElementsByTagName("MessageHeader");
if ((nodeList != null) && (nodeList.getLength() > 0)) {
Node header = nodeList.item(0);
JAXBElement jaxbElement = null;
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
jaxbElement = (JAXBElement) unmarshaller.unmarshal(header);
if (jaxbElement != null) {
Object value = jaxbElement.getValue();
if ((value != null) && (value instanceof JavaObject)) {
setResponseHeader((JavaObject) value);
}
}
}
我不知道另一個服務的MessageHeader是如何作爲名稱空間URI來的。任何人都可以幫助我嗎?
我已經在消息頭中傳遞了另一個服務的應用程序名稱。這是問題。通過傳遞正確的價值來解決它。謝謝大家的幫助。 – Vijay