Domanda

Ho un problema che genera un colpo di testa di sicurezza gSOAP (WSSE). Ho compilato tutti i file necessari e utilizzati i seguenti chiamate per aggiungere l'intestazione di protezione WSSE alla richiesta:

soap_wsse_add_Security(proxy.soap);
soap_wsse_add_UsernameTokenText(proxy.soap, "UsernameToken-1", "user","passwd");

La mia intestazione di protezione viene fuori cercando in questo modo:

<SOAP-ENV:Header>
  <wsse:Security SOAP-ENV:mustUnderstand="true">
    <wsse:UsernameToken wsu:Id="UsernameToken-1">
      <wsse:Username>testuser</wsse:Username>
      <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">
    testPassword</wsse:Password>
    </wsse:UsernameToken>
  </wsse:Security>
</SOAP-ENV:Header>

Rispetto alle specifiche del server mi è stato fornito, la riga

<wsse:Security SOAP-ENV:mustUnderstand="true">

manca xmlns: wsse = "http ...." e la linea

<wsse:UsernameToken wsu:Id="UsernameToken-1">

manca il xmlns: wsu = "http ...." parti. Quindi voglio il a guardare in questo modo:

 <wsse:Security  xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"  SOAP-ENV:mustUnderstand="true">
  <wsse:UsernameToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"  wsu:Id="UsernameToken-1">

Come faccio ad aggiungere i xmlns: wsse e xmlns: parti WSU alle linee specifiche per essere in linea con le specifiche? L'errore che ottengo dal servizio è:

com.ctc.wstx.exc.WstxParsingException: Undeclared namespace
    prefix "wsse"

Ho guardato la documentazione gSOAP ma tutto quello che ho trovato è stato come aggiungere un colpo di testa, nulla su come aggiungere le definizioni degli spazi dei nomi agli elementi nell'intestazione.

L'assistenza sarà apprezzato.

È stato utile?

Soluzione 2

Proprio rispondendo alla domanda per chiuderla.

Quello che dovete fare è quello di modificare il file * .nsmap. C'è possibile aggiungere le definizioni di namespace nella struct per esempio:

SOAP_NMAC struct Namespace ZamtelWSZambia_namespaces[] =
{
    {"wsse", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-ecext-1.0.xsd", NULL, NULL},
    {NULL, NULL, NULL, NULL}
};

Poi nel client è sufficiente includere il NSMAP in questo modo:

#include "soapstubs/XXXX.nsmap"

Altri suggerimenti

In realtà, non si deve modificare il file .nsmap, ma piuttosto la typemap.dat, che colpisce la generazione automatica di .nsmap.

Usa WS \ WS-typemap.dat come base (definisce già namespace WS-SE) e di fornire come argomento per il comando wsdl2h:

wsdl2h -t WS-typemap.dat ...
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top