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
- Planen Sie die Migrationsstrategie. Sie haben zwei Möglichkeiten, einen Apache-SOAP-Client auf einen JAX-RPC-Web-Service-Client zu portieren:
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.
- 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.
- 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(""));
.- 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.
- 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.
- 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"));
- 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.
- 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.
- 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,...});
.
- 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) ...
- 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.