【问题标题】:Get response header using Jax WS使用 Jax WS 获取响应标头
【发布时间】:2014-03-10 20:18:10
【问题描述】:

我需要使用 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>
      <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>

这是我的 Java 代码:

WsDownloadInfs infs = new WsDownloadInfs();     
WsDownloadInfsSoap proxy = infs.getWsDownloadInfsSoap();
proxy.login(1779, "5270");

在这个操作中我没有返回(它是无效的)。

我尝试过像这样使用 BindingProvider:

BindingProvider prov = (BindingProvider) proxy;
HeaderList list = (HeaderList) prov.getResponseContext().get("com.sun.xml.internal.ws.api.message.HeaderList");

但它没有任何属性。

【问题讨论】:

  • 什么是 WsDownloadInfs?请添加更多上下文(代码)。
  • WsDownloadInfs 是我的服务类。

标签: java web-services soap jax-ws


【解决方案1】:

我找到了解决办法!

这是我所做的:

我采用绑定提供者,然后从以下位置获取响应 HeaderList:

    BindingProvider prov = (BindingProvider) proxy;
    HeaderList list = (HeaderList) prov.getResponseContext().get("com.sun.xml.internal.ws.api.message.HeaderList");

所以,从 HeaderList 我得到了我想要的 Header(在这种情况下是“_SessaoIdHeader_QNAME”):

    Header h =list.get(ObjectFactory._SessaoIdHeader_QNAME, true);

然后我创建一个 SOAPMessage 并将 Header 内容写入它,之后我从 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();

再次感谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-20
    相关资源
    最近更新 更多