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);
}
}
------------------------
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
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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");
"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");
"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");
JAXRPCTIE01: caught exception while handling request: deserialization error: unexpected XML reader state. expected: END but found: START: test
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
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?
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
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 ... }
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 ...
}
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 ... }
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; }
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.
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;
}
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
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; }
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