Migration de services Web Apache SOAP vers des services Web JAX-RPC basés sur les normes Java EE

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

  1. 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 :
    • Si vous disposez d'un document WSDL (ou pouvez en créer un) pour le service, envisagez l'utilisation de l'outil de commande WSDL2Java pour générer des liaisons pour le service Web. Il est plus fastidieux d'adapter un client SOAP Apache pour utiliser les liaisons JAX-RPC générées, mais le code client résultant est plus robuste et plus facile à gérer.

      Pour ce faire, voir l'article du centre de documentation sur le développement d'un client de services Web.

    • Si vous ne disposez pas de document WSDL pour le service, ne vous attendez pas à ce que le service change. Si vous souhaitez faire évoluer le client SOAP Apache avec le minimum de travail possible, convertissez le code pour utiliser l'interface DII (Dynamic Invocation Interface) JAX-RPC qui est similaire aux API SOAP Apache. Les API DII n'utilisent pas de WSDL, ni de liaisons générées.
    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.
  2. 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.
  3. 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.
    1. 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.
    2. 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.

    3. 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"));
    4. 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.
    5. 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);
      • 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
    6. 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.
    7. 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) ...
    8. 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.


Icône indiquant le type de rubrique Rubrique de tâche



Icône d'horodatage Dernière mise à jour: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_migratewbs
Nom du fichier : twbs_migratewbs.html