Java 使用Jax-WS获取响应头
我需要使用JAX-WS从响应中获取SOAP头以使用WS。这是响应xml:Java 使用Jax-WS获取响应头,java,web-services,soap,jax-ws,Java,Web Services,Soap,Jax Ws,我需要使用JAX-WS从响应中获取SOAP头以使用WS。这是响应xml: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <soap:Header> <sess
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Header>
<sessaoIdHeader xmlns="http://www.cvm.gov.br/webservices/">
<Guid>9d63221b-8a3a-4fd6-84fe-100fa53a55d5</Guid>
<IdSessao>237196706</IdSessao>
</sessaoIdHeader>
</soap:Header>
<soap:Body>
<LoginResponse xmlns="http://www.cvm.gov.br/webservices/"/>
</soap:Body>
</soap:Envelope>
在这个操作中,我没有返回(它是无效的)
我尝试过使用BindingProvider,如下所示:
BindingProvider prov = (BindingProvider) proxy;
HeaderList list = (HeaderList) prov.getResponseContext().get("com.sun.xml.internal.ws.api.message.HeaderList");
但是它没有任何属性。我找到了一个解决方案
以下是我所做的:
我从绑定提供程序获取响应标题列表,然后从以下位置获取响应标题列表:
BindingProvider prov = (BindingProvider) proxy;
HeaderList list = (HeaderList) prov.getResponseContext().get("com.sun.xml.internal.ws.api.message.HeaderList");
因此,从HeaderList中我得到了我想要的标题(在本例中为“\u SessaoIdHeader\u QNAME”):
然后我创建一个SOAPMessage并将标题内容写入其中,然后从SOAPHeader中获取我想要的内容:
SOAPHeader header = message.getSOAPHeader();
NodeList idSessaoNode = header.getElementsByTagNameNS("*", "IdSessao");
String idSess = idSessaoNode.item(0).getChildNodes().item(0).getNodeValue();
String guid = header.getTextContent();
以下是完整的代码:
WsDownloadInfs infs = new WsDownloadInfs();
WsDownloadInfsSoap proxy = infs.getWsDownloadInfsSoap();
proxy.login(1779, "5270");
BindingProvider prov = (BindingProvider) proxy;
HeaderList list = (HeaderList) prov.getResponseContext().get("com.sun.xml.internal.ws.api.message.HeaderList");
Header h =list.get(ObjectFactory._SessaoIdHeader_QNAME, true);
SOAPMessage message = MessageFactory.newInstance().createMessage();
h.writeTo(message);
SOAPHeader header = message.getSOAPHeader();
NodeList idSessaoNode = header.getElementsByTagNameNS("*", "IdSessao");
String idSess = idSessaoNode.item(0).getChildNodes().item(0).getNodeValue();
String guid = header.getTextContent();
再次感谢 什么是WsDownloadInfs?请添加更多上下文(代码)。WsDownloadInfs是我的服务类。
SOAPHeader header = message.getSOAPHeader();
NodeList idSessaoNode = header.getElementsByTagNameNS("*", "IdSessao");
String idSess = idSessaoNode.item(0).getChildNodes().item(0).getNodeValue();
String guid = header.getTextContent();
WsDownloadInfs infs = new WsDownloadInfs();
WsDownloadInfsSoap proxy = infs.getWsDownloadInfsSoap();
proxy.login(1779, "5270");
BindingProvider prov = (BindingProvider) proxy;
HeaderList list = (HeaderList) prov.getResponseContext().get("com.sun.xml.internal.ws.api.message.HeaderList");
Header h =list.get(ObjectFactory._SessaoIdHeader_QNAME, true);
SOAPMessage message = MessageFactory.newInstance().createMessage();
h.writeTo(message);
SOAPHeader header = message.getSOAPHeader();
NodeList idSessaoNode = header.getElementsByTagNameNS("*", "IdSessao");
String idSess = idSessaoNode.item(0).getChildNodes().item(0).getNodeValue();
String guid = header.getTextContent();