Bonjour à tous,


Dans le contexte d'un développement d'une application Web (écrite en GWT, Java to AJAX); je suis amené à utiliser des services web de type WSDL (messages SOAP)

Aujourd'hui, nous avons déployé un service et depuis la partie "serveur" de mon application GWT (via une architecture RPC implémenté via des objets de type GWT), j'invoque le Web Service à l'aide d'une série de classes générées sur base du WSDL

Comme je ne suis pas un expert, je vais essayer de le dire encore autrement:

Mon client Web (GWT) utilise un RemoteService (et son pendant RemoteServiceAsync) dont l'implémentation se trouve du côté serveur (GWT) (RemoteServiceImpl). Cette implémentation du côté serveur (GWT) réalise un appel distant à un web service (disponible depuis un autre serveur), ce web service est de type WSDL

L'appel au service WSDL a été rendu possible en re-générant les interfaces java "représentants" le web service WSDL et en utilisant ces interfaces pour invoquer les méthodes du service.

Punaise, c'est vraiment pas facile à expliquer...

En gros, j'ai 3 parties

[Serveur Java (1) + Web Service]
[Serveur Java (2) qui fait parti de mon application GWT, et donc écrit en utilisant GWT - RPC]

[Client Web GWT utilisant son mécanisme RPC pour communiquer avec "son" serveur(2)]

le serveur(2) invoque le service du serveur(1) en utilisant des interfaces java générées depuis le WSDL se trouvant sur le serveur(1).

Ce que nous avons aujourd'hui:
Le serveur(1) publie un service web de type WSDL (en utilisant Axis, JAX-WS etc. pour passer du Java au XML (WSDL))

Le serveur(2) utilise le service web de type WSDL sur base d'interfaces java générées depuis le WSDL (une conversion dans l'autre sens)

Nous avons donc au final:
Serveur(1) publie WSDL en faisant "Java to XML"
Serveur(2) utilise WSDL en faisant "XML to Java" puis "Java RemoteInvocation"

Ma question:
Est-il possible de "simplifier" l'invocation du web service WSDL dans mon implémentation de mon serveur GWT (écrit en Java également ) ?

Nous aimerions ne pas devoir re-générer les interfaces Java correspondantes au service WSDL et ensuite les utiliser pour faire l'invocation des méthodes mais s'appuyer simplement sur le WSDL lui-même...

Au lieu d'avoir dans l'implémentation finale du serveur(2) en GWT un code du style:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
MyService service = new MyService();
service.getImpl().mySpecificService( ...);
Nous aimerions un code plus "dynamique" du style:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
// declaration
@WebServiceRef( ... )
MyWebService myWebService;
 
myWebService.mySpecificService( ...);
Sans avoir à écrire une interface "MyWebService" du côté "utilisateur du service"...

Est-ce possible? Si oui, comment?



Si je pose la question, c'est parce qu'un ami à moi dit pouvoir faire ce type de requête 'simple et méchante' dans son client web écrit en Flex (ActionScript avec son MXML)...

Du genre, il invoque un service via un object spécifique, genre

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
WebService ws = new WebService();
ws.setUrl("http://127.0.0.1:9090/myWebService?wsdl");
ws.setParams(" bla bla bla ");
Result result = ws.send();
String s = result.response.status;
sachant que "Result" est une classe propre à Flex (en ActionScript) mais qui permet d'accéder dynamiquement à l'élément "response", puis à l'élement "status" dans "response"...

par rapport à une réponse formatée en XML du genre:
<...><response><status></status></response></...>