[Resolu][Java][WebService] complexType qui peux changer

Je travail sur un nouveau projet Java avec des appelles WebServices sur un serveur d’application Oracle et une JVM 1.4.

J’ai quelques soucis avec un WebService où un complexType peux changer selon la configuration. Pour l’instant j’étais parti sur une solution à base d’Axis 1, le problème c’est que Axis génère un bean qui ne pourra pas évoluer sauf en recompilant la classe.

Voici un exemple de requête SOAP :

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="server.DQEIndeSoap.DQEIndeSoap"> <soapenv:Header/> <soapenv:Body> <ser:LookupCandidate> <CandidateToLookup> <NOM>BOB</NOM> <FAX>03000000000</FAX> <EMAIL>bob.bob@bob.fr</EMAIL> <PRENOM>BOB</PRENOM> <MOBILE>0600000000</MOBILE> <PAYS>FRANCE</PAYS> <SIGTIE>594299</SIGTIE> <LOCALITE>LILLE</LOCALITE> <TELEPHONE>03000000</TELEPHONE> <CODPOS>59000</CODPOS> <id>1</id> </CandidateToLookup> <MaxReturnedCandidates>100</MaxReturnedCandidates> </ser:LookupCandidate> </soapenv:Body> </soapenv:Envelope>

Le code CandidateToLookup devra donc évoluer et des champs seront à rajouter ou à supprimer. Y a-t-il une solution assez simple à mettre en place pour prendre en compte ce cas ?

Ton besoin est un peu étrange : un contrat de WS qui change selon la configuration, ça sent pas top bon…
Qu’entends-tu d’ailleurs par là ? N’est-il pas possible de définir un type qui comportera toutes les propriétés possibles, quitte à en mettre certaines à nil ?
Dans le cas contraire, ça veut dire que tu parles d’évolutions non connues à l’avance : impossible à gérer pour un WS.

Normalement, un contrat de WS ne change jamais : de toute façon les clients du service ne peuvent pas s’adapter à des variations (il faut pouvoir se mettre d’accord sur, et respecter, un contrat bien défini).
Ce qui se fait en revanche, c’est servir différentes versions (toutes constantes) du service : les évolutions sont bien connues et décrites dans les WSDL de chaque version du service.

En dernier ressort, tu peux toujours faire de ton élément variable un unique élément texte/CDATA : les clients devront analyser le texte pour en tirer les infos permettant de reconstituer l’objet (par exemple au format XML ou properties, pour le coup tu es libre d’y mettre ce que tu veux) ; mais tu perds toute la magie du WS ! :smiley:

Bon courage… :smiley:

En fait le Service est tres mal concu, il a du etre develope par un stagiaire. Apres avoir reflechi a toute les solutions, j’ai cree une couche d’abstraction qui utilise l’API reflexion et bean, j’ai aussi mis en place la generation automatique de la couche Axis via maven. Pour prendre en compte un nouveau dictionnaire qui change en fonction des besoins specifique de chaqui client, il suffit donc de supprimer l’ancienne couche Axis et de recompiler ma Servlet avec maven, simple et efficace.