Apache-SOAP-Web-Services auf JAX-RPC-Web-Services migrieren, die auf den Java EE-Standards basieren

Sie können Web-Services, die mit Apache SOAP entwickelt wurden, auf JAX-RPC-Web-Services (Java™ API for XML-based RPC) migrieren, die auf der Basis der Spezifikation "Web Services for Java Platform, Enterprise Edition (Java EE)" entwickelt werden.

Vorbereitende Schritte

Wenn Sie Web-Services verwenden, die auf Apache SOAP basieren, und jetzt Java-basierte Web-Services entwickeln und implementieren möchten, müssen Sie die Clientanwendungen, die mit Version 4.0 und Releases der Version 5.0 (vor 5.0.2) entwickelt wurden, migrieren.

Informationen zu diesem Vorgang

SOAP-Security (digitale XML-Signatur) auf der Basis der Apache-SOAP-Implementierung wurde entfernt. Anstatt SOAP-Security zu verwenden, migrieren und rekonfigurieren Sie die Anwendung auf die JSR-109-Implementierung von Web-Services.

Gehen Sie wie folgt vor, um diese Clientanwendungen den Java-Standards entsprechend zu migrieren:

Vorgehensweise

  1. Planen Sie die Migrationsstrategie. Sie haben zwei Möglichkeiten, einen Apache-SOAP-Client auf einen JAX-RPC-Web-Service-Client zu portieren:
    • Falls Sie ein WSDL-Dokument für den Service erstellt haben oder erstellen können, sollten Sie für das Generieren der Bindungen für den Web-Service die Verwendung des Befehls WSDL2Java in Erwägung ziehen. Es ist aufwendiger, einen Apache-SOAP-Client an die Verwendung der generierten JAX-RPC-Bindungen anzupassen, der resultierende Clientcode ist jedoch sehr robust und einfacher zu verwalten.

      Diesbezügliche Informationen finden Sie im Artikel zur Entwicklung von Web-Service-Clients im Information Center.

    • Falls Sie kein WSDL-Dokument für den Service haben, der Service nicht geändert werden soll und Sie den Apache-SOAP-Client mit geringstmöglichem Aufwand portieren möchten, können Sie den Code so konvertieren, dass er das JAX-RPC-DII (Dynamic Invocation Interface) verwendet, das mit den Apache-SOAP-APIs vergleichbar ist. Die DII-APIs verwenden keine WSDL oder generierten Bindungen.
    JAX-RPC gibt kein Framework für benutzerdefinierte Serializer an und bietet deshalb keine Unterstützung für angepasste Serializer. Falls Ihre Anwendung nicht mit der von WebSphere Application Server unterstützten Standardzuordnung von Java, WSDL und XML konform ist, sollten Sie nicht versuchen, die Anwendung zu migrieren. Der folgende Abschnitt geht davon aus, dass Sie sich für die Verwendung der JAX-RPC-DII-APIs entschieden haben.
  2. Sehen Sie sich das Beispiel "GetQuote" an. Im Abschnitt "Beispiele" finden Sie ein Beispiel für die Migration eines Web-Service. Dieses Beispiel ist in der Datei GetQuote.java enthalten, die ursprünglich für Benutzer von Apache SOAP geschrieben wurde. In der Datei sind die Änderungen erläutert, die für die Migration auf die JAX-RPC-DII-Schnittstellen erforderlich sind. Weitere Informationen finden Sie im Abschnitt "Beispiele" des Information Center.
  3. Konvertieren Sie die Clientanwendung von Apache SOAP auf die JAX-RPC-DII. Die Strukturen der Apache-SOAP-API und der JAX-RPC-DII-API sind ähnlich. Bei beiden Schnittstellen können Sie ein Call-Objekt instanziieren und konfigurieren, die Parameter festlegen, die Operation aufrufen und das Ergebnis verarbeiten. Sie können in JAX-RPC eine generische Instanz eines Serviceobjekt mit dem folgenden Befehl erstellen:
    javax.xml.rpc.Service service = ServiceFactory.newInstance().createService(new QName(""));
    .
    1. Erstellen Sie das Call-Objekt. Eine Instanz des Call-Objekts wird mit dem folgenden Code erstellt:
      org.apache.soap.rpc.Call call = new org.apache.soap.rpc.Call ()
      In JAX-RPC wird eine Instanz des Call-Objekts mit
      java.xml.rpc.Call call = service.createCall();
      festgelegt.
    2. Definieren Sie den Endpunkt-URI (Uniform Resource Identifiers). Der Ziel-URI für die Operation wird als Parameter an
      call.invoke:  call.invoke("http://...", "");
      übergeben.
      In JAX-RPC wird die Methode "setTargetEndpointAddress" als Parameter für
      call.setTargetEndpointAddress("http://...");
      verwendet.

      In Apache SOAP gibt es für das Call-Objekt eine Methode "setTargetObjectURI", die Routing-Informationen für die Anforderung enthält. In JAX-RPC ist keine äquivalente Methode verfügbar. In JAX-RPC sind die Informationen im targetObjectURI im targetEndpoint-URI enthalten.

    3. Legen Sie den Namen der Operation fest. Der Name der Operation wird im Call-Objekt von
      call.setMethodName("opName");
      konfiguriert.
      In JAX-RPC wird wie folgt die Methode "setOperationName" verwendet, die anstelle eines Parameters String einen QName akzeptiert:
      call.setOperationName(new javax.xml.namespace.Qname("namespace", "opName"));
    4. Legen Sie den Codierungsstil fest. Der Codierungsstil wird im Call-Objekt von
      call.setEncodingStyleURI(org.apache.soap.Constants.NS_URI_SOAP_ENC);
      konfiguriert.
      In JAX-RPC wird der Codierungsstil durch eine Eigenschaft des Call-Objekts
      call.setProperty(javax.xml.rpc.Call.ENCODINGSTYLE_URI_PROPERTY, "http://schemas.
      xmlsoap.org/soap/encoding/");
      festgelegt.
    5. Deklarieren Sie die Parameter, und setzen Sie die Parameterwerte. In Apache SOAP werden die Parametertypen und -werte von Parameterinstanzen beschrieben, die in einem Vektor zusammengestellt und vor dem Aufruf für das Call-Objekt gesetzt werden. Beispiel:
      Vector params = new Vector (); 
      params.addElement (new org.apache.soap.rpc.Parameter(name, type, value, encodingURI)); 
      // Für weitere Parameter wiederholen...
      call.setParams (params);
      In JAX-RPC wird das Call-Objekt mit Parameternamen und -typen konfiguriert, ohne dass Werte angegeben werden. Beispiel:
      call.addParameter(Name, XML-Typ, Modus);
      // Für weitere Parameter wiederholen...
      call.setReturnType(Typ);
      Dabei gilt Folgendes:
      • Name (java.lang.String) ist der Name des Parameters.
      • XML-Typ (javax.xml.namespace.QName) ist der XML-Typ des Parameters.
      • Modus (javax.xml.rpc.ParameterMode) ist der Modus des Parameters, z. B. IN, OUT oder INOUT.
    6. Setzen Sie den Aufruf ab. Die Operation wird für das Call-Objekt von
      org.apache.soap.Response resp = call.invoke(endpointURI, "");
      aufgerufen.
      In JAX-RPC werden die Parameterwerte zu einer Feldgruppe zusammengestellt und an call.invoke übergeben, wie im folgenden Beispiel veranschaulicht:
      Object resp = call.invoke(new Object[] {parm1, parm2,...});
      .
    7. Prüfen Sie, ob Fehler vorliegen. Sie können in Apache SOAP die Antwort prüfen, um festzustellen, ob beim Aufruf ein SOAP-Fehler aufgetreten ist:
      if resp.generatedFault then {   
      org.apache.soap.Fault f = resp.getFault;   
      f.getFaultCode();   
      f.getFaultString(); 
      }
      Wenn ein SOAP-Fehler beim Aufruf vorliegt, wird in JAX-RPC eine java.rmi.RemoteException ausgelöst.
      try  {    
      ... call.invoke(...) 
      } catch (java.rmi.RemoteException) ...
    8. Rufen Sie das Ergebnis ab. In Apache SOAP kann bei einem fehlerfreien Aufruf, der ein Ergebnis zurückgibt, das Ergebnis wie folgt vom Response-Objekt abgerufen werden:
      Parameter result = resp.getReturnValue(); return result.getValue();
      In JAX-RPC ist das Ergebnis des Aufrufs das zurückgegebene Objekt, vorausgesetzt, es wird keine Ausnahme ausgelöst:
      Object result = call.invoke(...);
       ... 
      return result;

Ergebnisse

Sie haben Apache-SOAP-Web-Services auf JAX-RPC-Web-Services migriert, die auf der Spezifikation "Java EE" basieren.

Nächste Schritte

Entwickeln Sie einen Web-Service-Client, der auf der Spezifikaton "Web Services for Java EE" basiert.

Testen Sie die Web-Service-fähigen Clients, um sicherzustellen, dass der Migrationsprozess erfolgreich war und Sie die Web-Services in einer Java EE-Umgebung implementieren können.


Symbol, das den Typ des Artikels anzeigt. Taskartikel



Symbol für Zeitmarke Letzte Aktualisierung: 25.05.2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_migratewbs
Dateiname:twbs_migratewbs.html