Mit Web Services Invocation Framework (WSIF) können Sie eine Referenz an einen Web-Service binden und anschließend die Referenz
über JNDI suchen.
Informationen zu diesem Vorgang
Auf einen Web-Service greifen Sie über Informationen zu, die im WSDL-Dokument für den Service
enthalten sind.
Wenn Sie nicht wissen, wo sich das WSDL-Dokument für den Service befindet, jedoch sicher sind, dass
es in einer UDDI-Registry registriert ist, können Sie es in der Registry
suchen. Java-Programme greifen auf ähnliche Wiese auf Java-Objekte und -Ressourcen zu, verwenden jedoch
eine JNDI-Schnittstelle.
Die Codefragmente in den folgenden Schritten veranschaulichen, wie Sie mit
WSIF eine Referenz auf einen Web-Service binden und anschließend die Referenz über JNDI suchen können.
- Geben Sie die Argumentwerte für den Web-Service an.
Der Web-Service wird in WSIF
durch eine Instanz der Klasse org.apache.wsif.naming.WSIFServiceRef repräsentiert. Das einfache referenzierbare Objekt hat den folgenden Konstruktor:
public WSIFServiceRef(
String WSDL,
String sNS,
String sName,
String ptNS,
String ptName)
{
[...]
}
Erläuterungen zu dem Beispiel:
- WSDL ist die Position der WSDL-Datei mit der Definition des
Service.
- sNS ist der gesamte Namespace für die Servicedefinition. (Wenn in der WSDL-Datei nur ein Service definiert ist,
kann null angegeben werden.)
- sName ist der lokale Name für die Servicedefinition. (Wenn in der WSDL-Datei nur ein Service definiert ist,
kann null angegeben werden.)
- ptNS ist der gesamte Namespace für den Porttyp innerhalb des zu verwendenden Service. (Wenn für den Service nur
ein Porttyp verfügbar ist,
kann null angegeben werden.)
- ptName ist der lokale Name für den Porttyp. (Wenn für den Service nur
ein Porttyp verfügbar ist,
kann null angegeben werden.)
Beispiel einer WSDL-Datei für einen Web-Service, die unter der Webadresse
http://meinServer/WSDL/Example.WSDL verfügbar ist und die folgenden Service- und Porttypdefinitionen
enthält:
<definitions targetNamespace="http://hostname/namespace/example"
xmlns:abc="http://hostname/namespace/abc"
[...]
<portType name="ExamplePT">
<operation name="exampleOp">
<input name="exampleInput" message="tns:ExampleInputMsg"/>
</operation>
</portType>
[...]
<service name="abc:ExampleService">
[...]
</service>
[...]
</definitions>
Für die Klasse WSIFServiceRef können die folgenden Argumentwerte angegeben werden:
- WSDL ist http://meinServer/WSDL/Example.WSDL
- sNS ist http://hostname/namespace/abc
- sName ist ExampleService
- ptNS ist http://hostname/namespace/example
- ptName ist ExamplePT
- Binden Sie den Service über JNDI.
Wenn Sie die Servicereferenz über JNDI an das
Namensverzeichnis binden möchten, können Sie die Klasse
"com.ibm.websphere.naming.JndiHelper" von WebSphere Application Server verwenden:
[...]
import com.ibm.websphere.naming.JndiHelper;
import org.apache.wsif.naming.*;
[...]
try {
Context startingContext = new InitialContext();
WSIFServiceRef ref = new WSIFServiceRef("http://meinServer/WSDL/Example.WSDL",
"http://hostname/namespace/abc"
"ExampleService",
"http://hostname/namespace/example",
"ExamplePT");
JndiHelper.recursiveRebind(startingContext,
"meinKontext/meinSubkontext/meineServiceRef", ref);
}
catch (NamingException e) {
//Fehler behandeln.
}
[...]
- Suchen Sie den Service über JNDI.
Das folgende Codesegment zeigt die Suche nach einem Service unter Verwendung von
JNDI:
[...]
try {
[...]
InitialContext ic = new InitialContext();
WSIFService meinService =
(WSIFService) ic.lookup("meinKontext/meinSubkontext/meineServiceRef");
[...]
}
catch (NamingException e) {
//Fehler behandeln.
}
[...]