[WebService] Serveur nuSoap / Client Java

Serveur nuSoap / Client Java [WebService] - PHP - Programmation

Marsh Posté le 03-05-2005 à 08:46:19    

Bonjour,
 
J'ai réalisé un service web en php et j'essaye de le consommer avec un client java.
Mon client en php basé comme le service web sur nuSoap fonctionne très bien, mais quand je cherche à faire pareil avec mon client java, ça fonctionne moins bien.
Ca vient apparement de la structure des données que je reçois en retour.
Actuellement, quand je consomme un service, je reçois en retour un array(array()) (en php).
 
Du genre:
 
array {
 [0] => array {
       [nom]=>'toto'
       [prenom]=>'titi'
      }
 [1] => array {
       [nom]=>'blublu'
       [prenom]=>'blabla', mis
      }
 [2] => ... etc
}
 
Je comprends que Java n'arrive pas à comprendre du premier coup cette structure de données mais je n'arrives pas la faire reconnaitre.
 
KK'un a-t-il déjà rencontré ce problème?
 
merci d'avance

Reply

Marsh Posté le 03-05-2005 à 08:46:19   

Reply

Marsh Posté le 03-05-2005 à 11:01:41    

Tu reçois pas une structure mais des données au format XML(principes des webservices), tu es sur qu'il ya pa moyen de les extraires??

Reply

Marsh Posté le 03-05-2005 à 11:35:11    

Quand j'utilise mon client php avec nuSoap il arrive à les traiter sans problème, par contre en Java, il me dit qu'en gros il ne sait pas comment parser ce type d'info.
 
Voici le retour exact de mon client Java:
 
Random:10386ad70566c7bd64d3d70011cbafef
[SOAPException: faultCode=SOAP-ENV:Client; msg=The value of the 'http://schemas.xmlsoap.org/soap/encoding/:arrayType' attribute must be namespace-qualified.; targetException=java.lang.IllegalArgumentException: The value of the 'http://schemas.xmlsoap.org/soap/encoding/:arrayType' attribute must be namespace-qualified.]
 at org.apache.soap.rpc.Call.invoke(Call.java:294)
 at com.timetracker.client.WebService.getCustomers(WebService.java:68)
 at com.timetracker.client.SoapClient.main(SoapClient.java:32)
 
A noter que j'arrive très bien à recevoir les résultats de mes fonctions qui retourne du string (le random).  
Donc j'en ai déduit que comme je n'expliquais pas comment était structuré mes types complexes, il n'arrivait pas à le comprendre.

Reply

Marsh Posté le 03-05-2005 à 14:12:20    

up

Reply

Marsh Posté le 04-05-2005 à 14:58:15    

blup :'(

Reply

Marsh Posté le 04-05-2005 à 15:01:10    

Mais tu as regardé un peu des exemples d'utilisation de SOAP en JAVA??

Reply

Marsh Posté le 04-05-2005 à 16:30:19    

oui, le problème vient pas de java d'après moi, mais plutôt de mon serveur en php+nusoap :(

Reply

Marsh Posté le 04-05-2005 à 16:35:29    

Citation :

at com.timetracker.client.SoapClient.main(SoapClient.java:32)  


 
Tu serais pas en train de mélanger SOAP et nuSOAP??
enfin peut etre qu'on peut les mélanger.

Reply

Marsh Posté le 04-05-2005 à 17:23:52    

nuSoap est une librairie qui fait du Soap.
dans mon cas, c'est mon client java qui me dit qu'il y a un soucis pour comprendre la structure de ma données complexe que mon service web lui envoi. En tout cas, c'est ce que j'en comprends.
Donc j'en que c'est du coté du serveur qu'il faut que je déclare ça et non pas du coté du client (sinon y'a plus trop d'interet aux service web).. mais je ne sais pas comment faire ça avec la librairie nuSoap

Reply

Marsh Posté le 04-05-2005 à 17:26:10    

Ah mon avis tu t'es planté dans la définition de ton WebService.....tu as du mal définir le tpe de retour

Reply

Marsh Posté le 04-05-2005 à 17:26:10   

Reply

Marsh Posté le 05-05-2005 à 00:26:04    

sachant que j'arrive à le faire fonctionner en utilisant un client écrit en php-gtk/nusoap..
bref, j'espere plus trouver un exemple qu'une explication :-)
mon topic voulait aller dans ce sens..
parce qu'effectivement je pense avoir mal défini la variable de retour.

Reply

Marsh Posté le 08-05-2005 à 11:19:27    

j'ai testé 3 trucs:
1- mon service renvoie un string --> ça fonctionne
2- mon service renvoie un array de string --> ça fonctionne
3- mon service renvoie un array d'array --> ça ne fonctionne pas.
 
comment faire pour déclarer mon modele de données avec la librairie nuSoap??

Reply

Marsh Posté le 08-05-2005 à 21:25:22    

Je suis loin d'être un expert en Web services mais vu le message d'erreur de ton client java, ca aiderait pas de définir le type de retour dans le WSDL ?


Message édité par gabouel le 08-05-2005 à 21:26:49
Reply

Marsh Posté le 09-05-2005 à 09:30:47    

gabouel .. si c'est exactement ce que je cherche à faire :( mais je ne sais pas comment s'y prendre avec la librairie nuSoap :(
dés que je cherche à faire du wsdl mon service web ne fonctionne plus :(

Reply

Marsh Posté le 09-05-2005 à 14:53:46    

tu as cherché un peu sur google??
y'a plein de doc sur nusoap:
http://reseau.erasme.org/article.php3?id_article=349

Reply

Marsh Posté le 09-05-2005 à 17:58:40    

dans ce cas ci, il s'agit d'un exemple avec des variables simples. Je n'ai pas de problèmes avec les variables simples mais avec les variables complexes.. ce n'est pas grâve, j'ai effectivement une doc un peu plus commentée que les autres sur les complexType et wsdl. Merci.

Reply

Marsh Posté le 11-05-2005 à 16:36:09    

Alors ca avance?

Reply

Marsh Posté le 11-05-2005 à 22:50:08    

oui :)
voilà après déclaration wsdl:
$server->wsdl->addComplexType(
    'Customers',
    'complexType',
    'array',
    'all',
    '',
    array(
     array(
    'id' => 'xsd:string',  
    'name_customer' => 'xsd:string',
    'url' => 'xsd:string',
    'codeimg' => 'xsd:string',
    'doc' => 'xsd:string',
    )
  )
  );
 
sous cette forme et mon service retourne :
$server->register('listCustomers',
    array('randomid' => 'xsd:string'),
    array('return' => 'tns:Customers'),
    'urn:TimeTracker',
    'urn:TimeTracker#listCustomers',
    'rpc',
    'encoded',
    'Liste des clients'
);
 
ça marche très bien avec un client php sous nuSoap et avec java pour les fonctions retournant des variables simple (string). Je n'ai par contre pas réussi encore à ce que mon client java puisse lire le variable complexe :(
voici le code que j'utilise:
SOAPMappingRegistry smr = new SOAPMappingRegistry();
  BeanSerializer beanSer = new BeanSerializer();
  smr.mapTypes(Constants.NS_URI_SOAP_ENC,
               new QName("urn:TimeTracker", "TimeTracker" ),
               Activities.class, beanSer, beanSer);
 
  call.setSOAPMappingRegistry(smr);
  call.setTargetObjectURI("urn:TimeTracker" );
   
  call.setMethodName("listActivities" );
  Vector params = new Vector();
     params.addElement(new Parameter("randomid", String.class, this.random, null));
     call.setParams(params);
  response = call.invoke(this.url, "" );

Reply

Marsh Posté le 11-03-2008 à 14:34:51    

Je deterre ce sujet...
 
Je fais le même travail que toi, et j'ai le même souci.
Tu pourrais poster ton code complet s'il te plait?
 
Merci d'avance.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed