Axe-tête de sécurité
Salut en essayant de générer un en-tête de sécurité dans Java Axis2 programme Client dans le format de.
<soapenv:Header>
<wsse:Security xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/04/secext>
<wsse:UsernameToken>
<wsse:Username>myUsername</wsse:Username>
<wsse:Password>myPassword</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
</soapenv:Header>
en utilisant le code suivant
SOAPHeaderElement wsseSecurity = new SOAPHeaderElement(new PrefixedQName("http://schemas.xmlsoap.org/ws/2002/04/secext","Security", "wsse"));
MessageElement usernameToken = new MessageElement("", "wsse:UsernameToken");
MessageElement username = new MessageElement("", "wsse:Username");
MessageElement password = new MessageElement("", "wsse:Password");
username.setObjectValue(myProps.getProperty("username"));
usernameToken.addChild(username);
password.setObjectValue(myProps.getProperty("password"));
usernameToken.addChild(password);
wsseSecurity.addChild(usernameToken);
BookingPort bp = bsl.getBooking();
((Stub) bp).setHeader(wsseSecurity);
Malheureusement sa ne générant pas tout à fait ce que je voulais et que je reçois.
<soapenv:Header>
<wsse:Security soapenv:actor="http://schemas.xmlsoap.org/soap/actor/next" soapenv:mustUnderstand="0" xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/04/secext">
<wsse:UsernameToken xmlns:wsse="">
<wsse:Username xmlns:wsse="">myUsername</wsse:Username>
<wsse:Password xmlns:wsse="">myPassword</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
</soapenv:Header>
Le service à l'autre extrémité ne semble pas gérer la des bits supplémentaires, ce qui entraîne une erreur
faultDetail:
{http://xml.apache.org/axis/}stackTrace:com.ctc.wstx.exc.WstxParsingException: Non-default namespace can not map to empty URI (as per Namespace 1.0 # 2) in XML 1.0 documents
at [row,col {unknown-source}]: [1,450]
Comment puis-je générer la SOAPHeader pour imprimer tout le vide bits?
Cheers
comment des en-têtes soap dans les services ..merci de donner le code d'exemple me...java et axis2 1.6.7
OriginalL'auteur yurl | 2010-07-01
Vous devez vous connecter pour publier un commentaire.
Vous passez une chaîne vide comme premier argument de MessageElement, et vous avez besoin de passer
null
. Notez quenull
et la chaîne vide (""
) ne sont pas la même chose en Java. Aussi, vous êtes vraiment de la triche en passant par le préfixe d'espace de noms pour le nom local (la seconde) paramètre de MessageElement constructeur...ce n'est pas ce qu'il est conçu pour. Cela étant dit, vous pouvez résoudre le problème en passantnull
que l'espace de noms (d'abord) de paramètre. Si vous essayez de passer directement, vous aurez probablement une ambigu constructeur d'erreur, donc faire quelque chose comme ce qui suit:Je voudrais aussi vous recommandons d'utiliser un autre service web moteur (pas Axis2) si vous avez des choix en la matière.
OriginalL'auteur Justin Garrick
Essayer cette façon de créer l'en-tête personnalisé avec l'Axe 1.* (Le code ci-dessus n'a pas l'air comme avec Axis2)
OriginalL'auteur HariKrishna