Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用jaxb解组器获取soap消息头_Java_Web Services_Soap_Jaxb_Soapheader - Fatal编程技术网

Java 使用jaxb解组器获取soap消息头

Java 使用jaxb解组器获取soap消息头,java,web-services,soap,jaxb,soapheader,Java,Web Services,Soap,Jaxb,Soapheader,我正在使用一个web服务,其soap消息头如下所示 <SOAP-ENV:Header> <MessageHeader xmlns:cnr="http://testservice.com/Namespaces/Types/Public/DataModel.xsd" xmlns="http://testservice.com/Namespaces/Types/Public/MessageHeader.xsd"> <CommonMessage

我正在使用一个web服务,其soap消息头如下所示

<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>

我不确定另一个服务的MessageHeader是如何作为名称空间URI出现的。有人能帮我吗?

像这样的东西也许能帮你:

JAXBContext jaxbContext = JAXBContext.newInstance(YourClass.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();

JAXBElement<YourClass> root = jaxbUnmarshaller.unmarshal(new StreamSource(
        header), YourClass.class);
YourClass response = root.getValue();

您可以阅读完整的文档。在那里你也可以找到你的错误。它非常有用。

我在消息头中传递了另一个服务的应用程序名。这就是问题所在。现在通过传递正确的值来解决此问题。谢谢大家的帮助。
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);
                }
            }
        }
JAXBContext jaxbContext = JAXBContext.newInstance(YourClass.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();

JAXBElement<YourClass> root = jaxbUnmarshaller.unmarshal(new StreamSource(
        header), YourClass.class);
YourClass response = root.getValue();