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

SOAP : client php / serveur java

5 réponses
Avatar
Benoît
Bonjour,
J'ai un problème pour envoyer un tableau de chaines depuis un client
php vers un serveur java en appelant un webservice.
Le serveur ne reconnait pas le type tableau de chaine de php.

Le code :
----- Java server method : -----

public String[] crypte(String[] message, String name) throws
RemoteException {
String[] messageFinal = new String[message.length];

[...]

return messageend;

}catch(Exception e){
throw new RemoteException(e.getMessage(), e);
}
}

----- PHP client : -----
$message= array ("aze","sdsq","jhgjhgh");
$wsdl = new SOAP_WSDL($url);
$client= $wsdl->getProxy();
[...]
$messageCrypte = $client->crypte($message, "test");

------------------------
Ca marche bien avec une chaine simple, par exemple :
$message="jkjhkj"; avec sur le serveur :
public String[] crypte(String message, String name){...}

L'erreur :

"JAXRPCTIE01: caught exception while handling request: unexpected
element type:
expected={http://mywebservice/...}StringArray,actual={http://mywebservice/...}Array"

Ca marche bien aussi dans l'autre sens : le serveur envoie un tableau
de string et je peux voir le contenu en php : print_r($messageCrypte).

Comment remedier à ce problème?
Merci de votre aide

5 réponses

Avatar
Thibaut Allender
"JAXRPCTIE01: caught exception while handling request: unexpected
element type:
expected={http://mywebservice/...}StringArray,actual={http://mywebservice/...}Array"


tu utilises PEAR::SOAP ?
dans ce cas, tu peux formatter ta chaine selon les besoins du serveur,
par exemple :

$messageSoap = new
SOAP_Value('test','{http://mywebservice/...}StringArray',$message);
$messageCrypte = $client->crypte($messageSoap, "test");

--
thibaut allender | freelance | http://capsule.org

Avatar
Benoît
... et j'ai cette erreur :

JAXRPCTIE01: caught exception while handling request: deserialization
error: unexpected XML reader state. expected: END but found: START: test
Avatar
Benoît
Merci pour ta réponse

Oui, j'utilise PEAR::SOAP.
J'ai essayé ta solution...sans résultats pour l'instant.
Que signifient exactement tous les paramètres de SOAP_Value()?
'{http://mywebservice/...}StringArray' : le type dans lequel on veut
convertir (tableau de string java)
$message : mon tableau de chaine en php
'test' : le premier paramètre à quoi sert-il?

Sinon existe-il une doc précise?
Merci
Avatar
Thibaut Allender

Que signifient exactement tous les paramètres de SOAP_Value()?
'{http://mywebservice/...}StringArray' : le type dans lequel on veut
convertir (tableau de string java)


oui, {namespace}type

$message : mon tableau de chaine en php


exact

'test' : le premier paramètre à quoi sert-il?


le nom de la variable qu'on envoie au serveur, vu ta ligne :
$messageCrypte = $client->crypte($message, "test");

je pensais que tu devais envoyer l'array $message sous le nom "test"

Sinon existe-il une doc précise?


précise, je ne sais pas, mais il y a ça :
http://pear.php.net/package/SOAP/docs/0.9.1/SOAP/SOAP_Value.html

ça fait 3 ans que je n'ai plus utilisé ça, mais je sais qu'il faut
obligratoirement passer par SOAP_Value() pour formatter correctement ce
qu'on va envoyer, sinon on ne parle pas en SOAP au serveur, et forcément
il ne pige pas grand chose ;)

maintenant, il faudrait voir ce que fait ta fonction crypte(), il y a
peut etre deja une manipulation de $message pour le transformer en
valeur SOAP, il suffit peut etre de changer "Array" en "StringArray"
comme type de valeur, au sein de la fonction, pour que ça fonctionne.

mais que je vois les étapes, il se pourrait bien que ça soit ça :

function crypte($value, $name) {
$messageArray = new
SOAP_Value($name,'{http://mywebservice/...}StringArray',$message);
la suite qui utilise $messageArray ...
}

--
thibaut allender | freelance | http://capsule.org

Avatar
Benoît
Merci bien, mais je précise :

Le deuxième paramètre n'a aucun rapport avec le premier. Pour
simplifier on va dire que je n'utilise qu'un seul paramètre et que le
serveur me renvoit celui-ci :

----- Java server method : -----
public String[] crypte(String[] message){
return message;
}

----- PHP client : -----
$messageCrypte = $client->crypte($message);

Et mon serveur (fonction crypte() ) est en java.
Que dois-je mettre comme nom de variable?
Le code client suivant ne fonctionne pas :
$messageSoap = new
SOAP_Value('nom','{http://mywebservice/...}StringArray',$message);
$messageCrypte = $client->crypte($messageSoap);

L'erreur suivante survient :
"JAXRPCTIE01: caught exception while handling request: deserialization
error: unexpected XML reader state. expected: END but found: START:
nom"

SOAP_Value n'est pas trés bien documenté sur le site de pear.php.net

Merci pour tes réponses.