[apache/AXIS] comment fait-on pour les objets??

comment fait-on pour les objets?? [apache/AXIS] - Java - Programmation

Marsh Posté le 19-02-2003 à 13:05:56    

salut tout le monde!
dans le cadre de mes activités diverses et variées, je suis amené à faire un webservice en Java, et j'ai donc choisi comme support apache/AXIS. bon ok, je vois comment s'en servir pour des choses simples, mais là une question insidieuse me turlupine : comment fait-on pour récuprérer des objets envoyés par le client???
des tpes simples (String et autres) c pas compliqué, mais les objets, pas d'idée!
vous savez??

Reply

Marsh Posté le 19-02-2003 à 13:05:56   

Reply

Marsh Posté le 19-02-2003 à 13:18:47    

[:blueflag]


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
Reply

Marsh Posté le 19-02-2003 à 13:27:51    

[:the time]  pourquoi un drapal?? ça t'intéresse aussi??
 
PS: pourquoi j'ai pu l'option "savoir par mail si quelqu'un répond à mon post"??? je sais que ça a rien à voir avec le topic, mais bon, j'en profite!

Reply

Marsh Posté le 19-02-2003 à 14:27:58    

arghbis a écrit :

[:the time]  pourquoi un drapal?? ça t'intéresse aussi??

oui :D
 
pour ton autre question, aucune idée.
t'as qu'a venir de temps en temps ;)


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
Reply

Marsh Posté le 19-02-2003 à 15:03:41    

j'ai compris!! en haut y'a marquer activer la notification par email, ce doit être la fonction qui remplace la case à cocher!!  [:pioupiou]

Reply

Marsh Posté le 19-02-2003 à 16:43:10    

j'ai vraiment besoin d'une réponse, alors [:kecje]!
je me doute à peu près du comment ça marche, mais j'aimerais bien une réponse de kelk'un ki l'a déjà fait avan de me lancer dans des trucs pendables et que ça marche poas à la fin!  :cry:

Reply

Marsh Posté le 19-02-2003 à 20:21:43    

alors, un dernier petit up et pis sinon tant pis!
 
 [:kecje]  :bounce:  :bounce:  :bounce:  :bounce:

Reply

Marsh Posté le 19-02-2003 à 20:45:54    

arghbis a écrit :

salut tout le monde!
dans le cadre de mes activités diverses et variées, je suis amené à faire un webservice en Java, et j'ai donc choisi comme support apache/AXIS. bon ok, je vois comment s'en servir pour des choses simples, mais là une question insidieuse me turlupine : comment fait-on pour récuprérer des objets envoyés par le client???
des tpes simples (String et autres) c pas compliqué, mais les objets, pas d'idée!
vous savez??

bon j'ai justement fait un peu d'axis aujourd'hui :D
bon, en fait moi j'ai fait l'inverse (j'envoie des objets maison en reponse), mais à priori la manip doit etre a peu pres la meme. Tu as un deploy.xml pour ton service, et bien tu declares simplement ton objet la dedans en mappant un nom xsi (euh je crois) a une classe Java (ou autre, d'ailleurs).
Si tu veux la syntaxe précise, va falloir attendre demain ;)


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
Reply

Marsh Posté le 19-02-2003 à 21:06:19    

ben c à peu près ce que je pensais, mais si tu as la syntaxe demain, je la veux bien! merci!  :hello:

Reply

Marsh Posté le 19-02-2003 à 23:40:00    

Je peux te donner la solution pour un bean, qui est l'exemple le plus fréquent. Je te conseille fortement de passer par ce genre de mécanisme (après tout je suppose que ton appel SOAP te renvoit un objet business -> javabean est la meillere solution).
 
Suppose que ta méthode SOAP renvoit un JavaBean Customer. Tu dois bien t'arranger pour que les propriétés suivantes soient respectées :
 

  • Constructeur vide
  • Propriétés privées
  • getter/setter
  • implements java.io.Serializable


exemple
 

Code :
  1. package com.society.app;
  2. /**
  3. * Generic Javabean used as SOAP response for XXXX calls.
  4. *  
  5. */
  6. public class Customer implements java.io.Serializable {
  7.    
  8.     private String name;
  9.     public Customer() {}
  10.     /**
  11.      * Returns the customer's name.
  12.      * @return the name of the customer
  13.      */
  14.     public String getName() {
  15.         return name;
  16.     }
  17.     /**
  18.      * Sets the customer's name.
  19.      * @param name the name of the customer
  20.      */
  21.     public void setName(String name) {
  22.         this.name = name;
  23.     }
  24. }


 
Ensuite suppose que tu as ta méthode SOAP
 

Code :
  1. public Customer getCustomer(String customerID)


 
Tu as ds ton fichier de deploiement un truc du genre
 

Citation :


<?xml version="1.0" encoding="UTF-8"?>
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
            xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
 <service name="XXXXXXXXXXXXX" provider="java:EJB">
  <parameter name="beanJndiName" value="ejb/CustomerManager"/>
  <parameter name="homeInterfaceName" value="com.society.app.CustomerManagerHome"/>
  <parameter name="remoteInterfaceName" value="com.society.app.CustomerManager"/>
  <parameter name="allowedMethods" value="getCustomer"/>  
  <parameter name="jndiURL" value="jnp://localhost:1099"/>
  <parameter name="jndiContextClass" value="org.jnp.interfaces.NamingContextFactory"/>
  <beanMapping qname="pocNS:Customer" xmlns:pocNS="urn:CustomerManagerService" languageSpecificType="java:com.society.app.Customer" />
 </service>
</deployment>


 
bon si je m'ennuie je te montre après comment faire pour récupérer les données au niveau du code lui meme :o


Message édité par darklord le 19-02-2003 à 23:40:32

---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 19-02-2003 à 23:40:00   

Reply

Marsh Posté le 19-02-2003 à 23:43:34    

Alors pour le client  
 

Code :
  1. URL endpoint =
  2.                 new URL("http://super.dev.app.org:8880/axis/services/XXXXXXXXXXXXXXXX" );
  3.             // getCustomer
  4.             Service service = new Service();
  5.             Call call = (Call)service.createCall();
  6.             QName qn = new QName("urn:CustomerManagerService", "Customer" );
  7.             call.registerTypeMapping(Customer.class, qn,
  8.                       new BeanSerializerFactory(Customer.class, qn),
  9.                       new BeanDeserializerFactory(Customer.class, qn));
  10.             call.setTargetEndpointAddress(endpoint);
  11.             call.setOperationName(new QName("", "getCustomer" ));
  12.             Customer resp = (Customer)call.invoke(new Object[]{"The_Customer_Id"});


 
et voilà tu as récupéré ton bean Customer ... Si tu as d'autres questions ...


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 19-02-2003 à 23:45:25    

ah merde j'ai mal lu ... Tu veux envoyer des objets spécifiques et les récupérer au niveau de ton EJB? Bin y a rien de compliqué à priori si ton beanMapping est fait (voir deploiement)


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 20-02-2003 à 08:51:58    

je te remercie pour le mal que tu t'es donné! c à peu près ce que je pensais faire (à quelques subtilités près, que je n'avais pas vues), mais c cool d'avoir un exemple concret!
 
 [:spikler]

Reply

Marsh Posté le 20-02-2003 à 08:58:46    

arghbis a écrit :

je te remercie pour le mal que tu t'es donné! c à peu près ce que je pensais faire (à quelques subtilités près, que je n'avais pas vues), mais c cool d'avoir un exemple concret!
 
 [:spikler]  


 
you're welcome ;)
pour la réception de données custom ca ne devrait pas etre trop dur si tu fait ton bean mapping :)
 
tiens nous au courant ok?


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 20-02-2003 à 09:17:51    

DarkLord a écrit :

Alors pour le client  
 

Code :
  1. URL endpoint =
  2.                 new URL("http://super.dev.app.org:8880/axis/services/XXXXXXXXXXXXXXXX" );
  3.             // getCustomer
  4.             Service service = new Service();
  5.             Call call = (Call)service.createCall();
  6.             QName qn = new QName("urn:CustomerManagerService", "Customer" );
  7.             call.registerTypeMapping(Customer.class, qn,
  8.                       new BeanSerializerFactory(Customer.class, qn),
  9.                       new BeanDeserializerFactory(Customer.class, qn));
  10.             call.setTargetEndpointAddress(endpoint);
  11.             call.setOperationName(new QName("", "getCustomer" ));
  12.             Customer resp = (Customer)call.invoke(new Object[]{"The_Customer_Id"});


 
et voilà tu as récupéré ton bean Customer ... Si tu as d'autres questions ...


 
Pourquoi tu utilises pas plutot les stubs généréré avec WSDL2Java ?? c'est lourd d'utiliser l'objet Call à la mimine

Reply

Marsh Posté le 20-02-2003 à 09:18:25    

explique toi tu m'intéresse :)


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 20-02-2003 à 09:20:43    

+1 :D

Reply

Marsh Posté le 20-02-2003 à 09:24:13    


 
 [:rofl]


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 20-02-2003 à 09:41:43    

Dans un AXIS, y a un utilitaire qui s'appelle WSDL2JAVA qui permet d'analyser la structure du WSDL, d'en déduire les service exposés et les objets transitoires, et qui créént les stubs et javabeans qui correspondent.
 
après tu as plus qu'à construire un objet servicen appeler la méhode que tu veux dessus comme si c'était un objet locale ...
 
Pour moi, c'est un des principaux avantage d'axis.
 
c'est assez bien expliqué là : http://cvs.apache.org/viewcvs.cgi/ [...] , and data
 
edit ! marche pas le lien :(


Message édité par benou le 20-02-2003 à 09:42:14
Reply

Marsh Posté le 20-02-2003 à 10:25:15    

j'avais vu cette utilitaire mais j'avais pas plus regardé que ca, merci. de toutes facons notre client est fait en C donc ... Ct juste un petit client java de test :/


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 20-02-2003 à 10:28:55    

ben tu peux aussi générer les stubs serveurs avec ca ...
Bien sûr, ca a un intérêt que si tu commences à bosser à partir d'un WSDL.
 
Sinon, y a aussi l'outil inverse : Java2WSDL qui est util quand t'as un service java que tu veux transformer en WebService

Reply

Marsh Posté le 20-02-2003 à 10:32:47    

ah tiens?? ça, ça m'intéresse beaucoup! en effet, je développe la partie serveur de telle sorte qu'on puisse l'utiliser en "local", mais il faut aussi la mettre en accès via un webservice. Donc si je comprend bien, ayant programmé l'application, j'utilise java2wsdl, j'obtiens un fichier wsdl qui me permet de déployer l'appli?? c ça?? et donc de générer facilement le client à la suite! c cool ça! :love:

Reply

Marsh Posté le 20-02-2003 à 10:34:27    

c'est exactement ca ...
mais bon, faut que tu penses tout de suite à bien séparer le client et le serveur et à envoyer que des types simple ou des beans entre les 2 ...


Message édité par benou le 20-02-2003 à 10:35:03
Reply

Marsh Posté le 20-02-2003 à 10:37:57    

des types simples?? ah ben non alors!!
moi le client m'envoie des objets complexes! et moi je lui renvoie des types simples effectivement!
 
ça marche pu dans ce cas là???  :cry:  :cry:

Reply

Marsh Posté le 20-02-2003 à 10:39:43    

qu'est ce que tu appelles objets complexes ?

Reply

Marsh Posté le 20-02-2003 à 10:42:07    

et bien ce n'est pas un String ni un int. c un objet composé de Collection, HashMap, types primitifs (String, int, etc) et d'autres types perso définis!

Reply

Marsh Posté le 20-02-2003 à 10:48:38    

arghbis a écrit :

et bien ce n'est pas un String ni un int. c un objet composé de Collection, HashMap, types primitifs (String, int, etc) et d'autres types perso définis!


 
bin rien ne t'empeche de faire un bean de tout ca hein :)


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 20-02-2003 à 10:50:36    

donc, au final :
- la solution de benou, c super si tu ne passe que des types simples (String, int, et autres)
- la solution de DarkLord, c super si tu as besoin de types complexes
 
right?? :??:

Reply

Marsh Posté le 20-02-2003 à 10:57:37    

non pas right du tout !
 
j'ai jamais dit que tu pouvais passer que des types simples !
 
tu peux passer des types que Axis connait. De base, il connait les types simples, les beans (d'ailleur il ne respecte pas exactement la norme javabean :o ), et un certains nombre d'autres classes (dont certaines de java.util).
 
Mais bon, le plus simple c'est de ne passer que des types simples et des beans. Là t'es sûr de pas avoir de problèmes !

Reply

Marsh Posté le 20-02-2003 à 10:59:29    

donc si je convertit mon objet en bean, ça marche (désolé, chuis un peu lent à la comprenette, ça fait que 2 jours que je fais du java!)

Reply

Marsh Posté le 20-02-2003 à 11:01:33    

ca fait 2 jours que tu fais du java et tu te lance dans AXIS ?? [:totoz]
 
sinon la réponse est oui.


Message édité par benou le 20-02-2003 à 11:02:18
Reply

Marsh Posté le 20-02-2003 à 11:05:44    

ben j'ai déjà fait un peu de java, mais c t y'a longtemps! et si tu veux, là j'arrive dans un projet où tout est fait en java, sur plusieurs sites. Donc bon, développer la partie java, j'y arrive (c un peu laborieux car les classes qui sont déjà développées sont énormes et ça fait pas longtmps que je bosse dessus), mais le coup du axis avec les types "complexe" les beans et autrs, g t un peu dépassé. Maintenant, ça va mieux! merci pour vos explications!  [:spikler]

Reply

Marsh Posté le 20-02-2003 à 11:50:59    

arghbis a écrit :

donc si je convertit mon objet en bean, ça marche (désolé, chuis un peu lent à la comprenette, ça fait que 2 jours que je fais du java!)


 
voir 3 posts plus haut :o


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 20-02-2003 à 11:54:20    

vi, c vrai!!  :jap:  :jap:  

Reply

Marsh Posté le 20-02-2003 à 22:34:05    

et je confirme que le coup du bean déclaré avec le <beanMapping> marche dans les deux sens (aussi bien en "reception" par axis (request du client) qu'en response, testé et approuvé cet aprem :love:

Reply

Marsh Posté le 20-02-2003 à 22:36:50    

the real moins moins a écrit :

et je confirme que le coup du bean déclaré avec le <beanMapping> marche dans les deux sens (aussi bien en "reception" par axis (request du client) qu'en response, testé et approuvé cet aprem :love:


 
 :whistle:


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 20-02-2003 à 22:41:12    

par curiosité, vous vous en servez pour quels genre de besoin des web services ??

Reply

Marsh Posté le 20-02-2003 à 22:42:20    

benou a écrit :

par curiosité, vous vous en servez pour quels genre de besoin des web services ??


 
On s'en sert pour tracker l'état des colis -> MP si tu veux des détails


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 20-02-2003 à 23:40:09    

DarkLord a écrit :


 
On s'en sert pour tracker l'état des colis -> MP si tu veux des détails

moi j'aurais simplement dit "pour offrir une interface des clients distants (non-java, qui plus est) vers l'application server/les ejb" :o

Reply

Marsh Posté le 20-02-2003 à 23:47:44    

the real moins moins a écrit :

moi j'aurais simplement dit "pour offrir une interface des clients distants (non-java, qui plus est) vers l'application server/les ejb" :o


 
bin voilà tu l'as dit :o


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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