Domanda

I need to get a SOAP Header from a response using JAX-WS to use a WS. This is the response 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>

And this is the my Java Code:

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

in this operation I don't have a return (it's void).

I have tried using BindingProvider like this:

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

But it doesn't have any properties.

È stato utile?

Soluzione

I find a solution!

Here's what i have done:

I take the the binding provider and then get the response HeaderList from:

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

So, from HeaderList i get the Header i want (in this case is "_SessaoIdHeader_QNAME"):

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

Then i create a SOAPMessage and write the Header content to it, afeter that i take what i want from the SOAPHeader:

    SOAPHeader header = message.getSOAPHeader();
    NodeList idSessaoNode = header.getElementsByTagNameNS("*", "IdSessao");
    String idSess = idSessaoNode.item(0).getChildNodes().item(0).getNodeValue();
    String guid = header.getTextContent();

Here is the complete code:

    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();

Thanks again!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top