Vous pouvez faire migrer des services Web qui ont été développés à l'aide d'Apache SOAP vers des services Web JAX-RPC (Java™ API for XML-based RPC) développés conformément à la spécification Web Services for Java EE (Java Platform, Enterprise Edition).
Avant de commencer
Si vous avez utilisé des services Web Apache
SOAP et que vous souhaitez désormais développer et implémenter des services Web
reposant sur Java, vous devez migrer les applications client de toutes les
versions 4.0, et des versions 5.0 antérieures à la version 5.0.2.
Pourquoi et quand exécuter cette tâche
La sécurité SOAP (signature numérique XML) fondée sur
l'implémentation SOAP Apache a été retirée. Au lieu d'utiliser la sécurité SOAP, faites migrer votre application vers l'implémentation JSR-109 de services Web et reconfigurez-la.
Pour faire migrer ces applications client conformément aux normes Java :
Procédure
- Planifiez votre stratégie de migration. Il existe deux manières de faire migrer un client SOAP Apache vers un client de services Web
JAX-RPC :
Comme JAX-RPC ne spécifie pas de structure de programme de sérialisation
écrit par l'utilisateur, JAX-RPC ne prend pas en charge l'utilisation de
programmes de sérialisation personnalisés.
Si votre application n'est pas
conforme au mappage par défaut entre Java, WSDL et XML pris en charge par
WebSphere Application Server, ne tentez pas de faire migrer l'application. Le reste de cette rubrique présume que vous avez choisi d'utiliser les
API DII (Dynamix Invocation Interface) JAX-RPC.
- Consultez le modèle GetQuote. Un exemple de migration de services Web
est disponible dans le C'entre de documentation.
Cet exemple se trouve dans le
fichier GetQuote.java, écrit à l'origine pour SOAP Apache et comporte
des explications sur les modifications requises pour migrer vers les interfaces
DII JAX-RPC.
Pour plus d'informations, consultez les exemples du Centre de documentation.
- Convertissez l'application client SOAP Apache en DII JAX-RPC. Les structures de l'API SOAP Apache et de l'API DII JAX-RPC sont similaires. Vous pouvez instancier et configurer un objet Call, définir les paramètres, invoquer l'opération et traiter le résultat dans ces deux structures. Vous pouvez créer une instance générique d'un objet Service à l'aide de la
commande suivante :
javax.xml.rpc.Service service = ServiceFactory.newInstance().createService(new QName(""));
dans JAX-RPC.- Créez l'objet Call. Une instance de l'objet Call est
créée avec le code suivant :
org.apache.soap.rpc.Call call = new org.apache.soap.rpc.Call ()
dans SOAP Apache.Une instance de l'objet Call est créée par
java.xml.rpc.Call call = service.createCall();
dans JAX-RPC.
- Définissez l'URI (Uniform Resource Identifier) du point de contact. L'URI cible de l'opération est transmis comme paramètre à
call.invoke: call.invoke("http://...", "");
dans SOAP Apache. La méthode setTargetEndpointAddress est utilisée comme paramètre de
call.setTargetEndpointAddress("http://...");
dans JAX-RPC.
SOAP Apache dispose d'une méthode setTargetObjectURI sur l'objet Call contenant
les informations d'acheminement pour la réponse.
JAX-RPC ne dispose pas de méthode équivalente. Les informations contenues dans l'URI de l'objet cible (targetObjectURI) sont incluses dans l'URI du point de contact cible (targetEndpointURI) pour JAX-RPC.
- Définissez le nom de l'opération. Le nom de
l'opération est configuré sur l'objet Call par
call.setMethodName("opName");
dans SOAP Apache. La méthode setOperationName qui accepte un paramètre
QName à la place
d'un paramètre
String, est utilisée dans JAX-RPC comme suit :
call.setOperationName(new javax.xml.namespace.Qname("namespace", "opName"));
- Définissez le style de codage. Le style de codage est
configuré sur l'objet Call par
call.setEncodingStyleURI(org.apache.soap.Constants.NS_URI_SOAP_ENC);
dans SOAP Apache.Le style de codage est défini par une propriété de l'objet Call
call.setProperty(javax.xml.rpc.Call.ENCODINGSTYLE_URI_PROPERTY, "http://schemas.xmlsoap.org/soap/encoding/");
dans JAX-RPC.
- Déclarez les paramètres et définissez les valeurs de paramètres. Les types et les valeurs des paramètres SOAP Apache sont décrits par des
instances de paramètre qui sont collectées dans un vecteur (vector) et définies
sur l'objet Call avant l'appel. Par exemple :
Vector params = new Vector ();
params.addElement (new org.apache.soap.rpc.Parameter(name, type, value, encodingURI));
// répéter pour des paramètres supplémentaires... call.setParams (params);
Pour JAX-RPC, l'objet Call est configuré avec des noms et des types de
paramètres sans fournir leurs valeurs. Par exemple :
call.addParameter(nom, typeXml, mode);
// répétition pour les paramètres supplémentaires
call.setReturnType(type);
Où
- nom (type java.lang.String) est le nom du paramètre
- typeXml (type javax.xml.namespace.QName) est le type XML du paramètre
- mode (type javax.xml.rpc.ParameterMode) est le mode du
paramètre, par exemple IN, OUT ou INOUT
- Effectuez l'appel. L'opération est appelée sur l'objet
Call par
org.apache.soap.Response resp = call.invoke(endpointURI, "");
dans SOAP Apache.Les valeurs de paramètre sont collectées dans un tableau et transmises à
call.invoke comme suit :
Object resp = call.invoke(new Object[] {parm1, parm2,...});
dans JAX-RPC.
- Vérifiez les éventuelles erreurs. Vous pouvez rechercher une éventuelle erreur SOAP dans l'invocation en vérifiant la réponse :
if resp.generatedFault then {
org.apache.soap.Fault f = resp.getFault;
f.getFaultCode();
f.getFaultString();
}
dans SOAP Apache.Une exception
java.rmi.RemoteException est affichée dans JAX-RPC si une erreur SOAP
se produit dans l'appel.
try {
... call.invoke(...)
} catch (java.rmi.RemoteException) ...
- Récupérez le résultat. Dans SOAP Apache, si
l'invocation réussit et renvoie un résultat, il peut être extrait de l'objet
Réponse :
Parameter result = resp.getReturnValue(); return result.getValue();
Dans JAX-RPC, le résultat de l'appel est l'objet retourné si aucune exception
n'est affichée :
Object result = call.invoke(...);
...
return result;
Résultats
Vous avez fait migré les services Web Apache SOAP vers des services Web JAX-RPC basés sur les standards Java EE.
Que faire ensuite
Développez un client de services Web basé sur la spécification
Web Services for Java Platform Enterprise Edition (J2EE).
Testez les clients activés pour le Web afin de vérifier que la migration a réussi et pour pouvoir implémenter les services Web dans un environnement Java EE.