Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Passage de valeur dans l'en-tête SOAP

4 réponses
Avatar
aalleaume
Bonjour, j'aimerais savoir comment je peux faire pour passer des
valeurs dans l'en-tête SOAP et aussi comment les récupérer.
Merci de votre aide.

4 réponses

Avatar
Régis Troadec
Salut,

"ZeBlackRider" a écrit dans le message de news:

Bonjour, j'aimerais savoir comment je peux faire pour passer des
valeurs dans l'en-tête SOAP et aussi comment les récupérer.
Merci de votre aide.


Regardes par exemple dans l'implementation Apache de SOAP : la classe Header
dans le paquetage org.apache.soap.
http://ws.apache.org/soap/docs/apiDocs/index.html

Tu as les methodes setAttribute(), getAttribute(), setHeaderEntries(),
getHeaderEntries().

C'est bien léger au niveau de la doc (il n'y a que les prototypes !) mais
c'est déjà ça.

HTH
Régis

Avatar
aalleaume
C'est ce que j'ai utilisé, mais le problème c'est que je développe
sous WebSphere Studio Application Developer et que les messages SOAP
sont générés automatiquement. Et comme j'ai une variable de session à
échanger entre le client et le serveur, je doit la faire passer dans
l'en-tête SOAP.

"Régis Troadec" wrote in message news:<c0qfa2$jf1$...
Salut,

"ZeBlackRider" a écrit dans le message de news:

Bonjour, j'aimerais savoir comment je peux faire pour passer des
valeurs dans l'en-tête SOAP et aussi comment les récupérer.
Merci de votre aide.


Regardes par exemple dans l'implementation Apache de SOAP : la classe Header
dans le paquetage org.apache.soap.
http://ws.apache.org/soap/docs/apiDocs/index.html

Tu as les methodes setAttribute(), getAttribute(), setHeaderEntries(),
getHeaderEntries().

C'est bien léger au niveau de la doc (il n'y a que les prototypes !) mais
c'est déjà ça.

HTH
Régis



Avatar
aalleaume
J'ai trouvé un code que j'essayes de tester, mais à chaque fois ça e
sort une exception : java.lang.ClassCastException

Voici quelques parties de mon code :

protected Call createCall() {
SOAPHTTPConnection soapHTTPConnection = new SOAPHTTPConnection();
if (setTcpNoDelayMethod != null) {
try {
setTcpNoDelayMethod.invoke(
soapHTTPConnection,
new Object[] { Boolean.TRUE });
} catch (Exception ex) {
}
}
Call call = new Call();
call.setSOAPTransport(soapHTTPConnection);
SOAPMappingRegistry smr = call.getSOAPMappingRegistry();
return call;
}

[...]

call.setMethodName("partResult");
call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);
call.setTargetObjectURI(targetObjectURI);
Vector params = new Vector();

Parameter sessionIDParam = new Parameter("sessionID",
java.lang.String.class, sessionID, Constants.NS_URI_SOAP_ENC);
params.addElement(sessionIDParam);

[...]

Header head = new Header();
Vector vRes = new Vector();

vRes.addElement((Object)sessionIDParam); <- (1)
head.setHeaderEntries(vRes);
call.setHeader(head);

[...]

(1) c'est à ce niveau que viens l'erreur, mais j'ai essayé de
transtyper le type en object et ça ne prends pas en compte le
transtypage. Par exemple, si j'ajoute un Parameter, transtyper en
Object (comme dans mon code), dans le Vector, l'exception m'indique :
java.lang.ClassCastException: org.apache.soap.rpc.Parameter


(ZeBlackRider) wrote in message news:...
C'est ce que j'ai utilisé, mais le problème c'est que je développe
sous WebSphere Studio Application Developer et que les messages SOAP
sont générés automatiquement. Et comme j'ai une variable de session à
échanger entre le client et le serveur, je doit la faire passer dans
l'en-tête SOAP.

[...]


Avatar
Régis Troadec
Salut,

"ZeBlackRider" a écrit dans le message de news:

J'ai trouvé un code que j'essayes de tester, mais à chaque fois ça e
sort une exception : java.lang.ClassCastException

Voici quelques parties de mon code :

protected Call createCall() {
SOAPHTTPConnection soapHTTPConnection = new SOAPHTTPConnection();
if (setTcpNoDelayMethod != null) {
try {
setTcpNoDelayMethod.invoke(
soapHTTPConnection,
new Object[] { Boolean.TRUE });
} catch (Exception ex) {
}
}
Call call = new Call();
call.setSOAPTransport(soapHTTPConnection);
SOAPMappingRegistry smr = call.getSOAPMappingRegistry();
return call;
}

[...]

call.setMethodName("partResult");
call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);
call.setTargetObjectURI(targetObjectURI);
Vector params = new Vector();

Parameter sessionIDParam = new Parameter("sessionID",
java.lang.String.class, sessionID, Constants.NS_URI_SOAP_ENC);
params.addElement(sessionIDParam);

[...]

Header head = new Header();
Vector vRes = new Vector();

vRes.addElement((Object)sessionIDParam); <- (1)
head.setHeaderEntries(vRes);
call.setHeader(head);

[...]

(1) c'est à ce niveau que viens l'erreur, mais j'ai essayé de
transtyper le type en object et ça ne prends pas en compte le
transtypage. Par exemple, si j'ajoute un Parameter, transtyper en
Object (comme dans mon code), dans le Vector, l'exception m'indique :
java.lang.ClassCastException: org.apache.soap.rpc.Parameter


Et pourtant org.apache.soap.rpc.Parameter hérite de java.lang.Object...
En théorie ca doit donc marcher et tu n'as même pas a upcaster
sessionIDParam
en Object. Ou bien il y a merdouille autre part.

Cependant en regardant dans l'API SOAP, j'ai observé une méthode getValue()
de
la classe Parameter qui renvoie une référence sur un Object (je ne sais pas
quoi exactement
tellement c'est mal documenté, mais je suppose que c'est la référence
propement dite de l'argument d'appel RPC). A ta place, je l'essaierais :

vRes.addElement(sessionIDParam.getValue());

HTH

a+, Regis