JAX-RPC
Die Spezifikation Java API for XML-based RPC (JAX-RPC) ermöglicht die Entwicklung SOAP-basierter, interoperabler und portierbarer Web-Services und Web-Service-Clients. JAX-RPC 1.1 stellt Kern-APIs für die Entwicklung und Implementierung von Web-Services auf einer Java™-Plattform zur Verfügung und ist eine erforderliche Komponente der Plattform Web Services for Java Platform, Enterprise Edition (Java EE). Die Plattform Java EE bietet Ihnen die Möglichkeit, portierbare Web-Services zu entwickeln.
WebSphere Application Server implementiert JAX-RPC-1.1-Standards.
Der Standard JAX-RPC definiert das Programmiermodell und die Bindungen für die Verwendung von Web Services Description Language (WSDL) für Web-Services in der Programmiersprache Java. JAX-RPC vereinfacht die Entwicklung von Web-Services durch Abschirmung der zugrunde liegenden Komplexität der SOAP-Kommunikation.
Oberflächlich betrachtet sieht JAX-RPC wird jede andere RMI-Instanziierung aus. Mit JAX-RPC können Clients jedoch so auf einen Web-Service zugreifen, als wäre der Service ein lokales Objekt, das im Adressbereich des Clients abgebildet ist, auch wenn sich der Web-Service-Provider am anderen Ende der Welt befindet. JAX-RPC verwendet das XML-Protokoll SOAP, das normalerweise auf HTTP aufsetzt.
JAX-RPC definiert die Zuordnung zwischen den WSDL-Porttypen und den Java-Schnittstellen sowie den Schematypen von Java und XML (Extensible Markup Language).
package com.ibm.mybank.ejb;
import java.rmi.RemoteException;
import com.ibm.mybank.exception.InsufficientFundsException;
/**
* Remote-Schnittstelle für Enterprise-Bean: Transfer
*/
public interface Transfer_SEI extends java.rmi.Remote {
public void transferFunds(int fromAcctId, int toAcctId, float amount)
throws java.rmi.RemoteException;
}
- Die Schnittstelle muss java.rmi.Remote erweitern wie RMI.
- Die Methoden müssen java.rmi.RemoteException auslösen.
- Methodenparameter dürfen keine fernen Referenzen sein.
- Ein Methodenparameter muss ein von der Spezifikation JAX-RPC
unterstützter Parameter sein. Die nachfolgend aufgelisteten Beispiele für Methodenparameter
werden unterstützt. Eine vollständige Liste der Methodenparameter können Sie der Spezifikation JAX-RPC entnehmen.
- Primitive-Typen: Boolean, Byte, Double, Float, Short, Int und Long
- Objekt-Wrapper für Primitive-Typen: java.lang.Boolean, java.lang.Byte, java.lang.Double, java.lang.Float, java.lang.Integer, java.lang.Long, java.lang.Short
- java.lang.String
- java.lang.BigDecimal
- java.lang.BigInteger
- java.lang.Calendar
- java.lang.Date
- Methoden können mit Ergebniswertobjekten verwendet werden, aber auch mit Wertobjekten, die sich aus den oben aufgelisteten Typen zusammensetzen.
Ein Client erstellt einen Stub und ruft Methoden für ihn auf. Der Stub agiert für den Web-Service wie ein Proxy. Für den Clientcode sieht dies wie ein lokaler Methodenaufruf aus. Jeder Methodenaufruf wird jedoch auf dem fernen Server entserialisiert (Marshaling-Operation). Beim Marshaling wird der Methodenaufruf wie vom SOAP-Protokoll vorgeschrieben in XML codiert.
- Serviceschnittstelle: eine Factory für Stubs oder dynamische Aufrufe und Proxy-Objekte zum Aufrufen von Methoden
- ServiceFactory-Klasse: eine Factory für Services
- loadService
In WebSphere Application Server Version 6.0 wird die Methode loadService bereitgestellt, um den für eine JAX-RPC-Implementierung erforderlichen Service Locator zu generieren. Wie Sie sich erinnern werden, gab es in früheren Versionen keine spezielle Methode für das Anfordern eines generierten Service Locator. Der Service Locator für verwaltete Clients wurde mit einer JNDI-Methode angefordert, und für den Service Locator für nicht verwaltete Clients musste eine Instanz des IBM spezifischen Service Locator ServiceLocator service=new ServiceLocator(...) erstellt werden, die keine Portierbarkeit unterstützt. Die loadService-Parameter sind folgende:
- wsdlDocumentLocation: ein URL für die Position des WSDL-Dokuments für den Service oder null
- serviceName: ein qualifizierter Name für den Service
- properties: eine Reihe implementierungsspezifischer Eigenschaften für die Suche nach der generierten Serviceimplementierungsklasse
- isUserInRoleDie Methode isUserInRole gibt einen booleschen Wert zurück, der angibt, ob der authentifizierte Benutzer für den aktuellen Methodenaufruf für die Endpunktinstanz in die angegebene logische Rolle aufgenommen werden soll.
- role: Der Parameter "role" ist eine Zeichenfolge, die den Namen der Rolle angibt.
- Service
- Call-Schnittstelle: wird für dynamische Aufrufe verwendet
- Stub-Schnittstelle: Basisschnittstelle für Stubs
Wenn Sie mit einem Stub auf den Web-Service-Provider zugreifen, bleiben Ihnen die meisten Details der JAX-RPC-API verborgen. Der Client erstellt eine ServiceFactory (java.xml.rpc.ServiceFactory). Aus der ServiceFactory erstellt der Client die Instanz einen Service (java.xml.rpc.Service). Der Service ist ein Factoryobjekt, das den Port erstellt. Der Port ist die Schnittstelle des fernen Serviceendpunkts zum Web-Service. Im Falle des DII (Dynamic Invocation Interface) wird mit dem Serviceobjekt Call-Objekte erstellt, die für den Aufruf von Methoden am Port des Web-Service konfiguriert werden können.
Eine vollständige Liste der unterstützten Standards und Spezifikationen finden Sie in der Dokumentation zu den Web-Service-Spezifikationen und den Anwendungsprogrammierschnittstellen.