Implementierungsdeskriptoren für einen JAX-WS-Client entwickeln
Implementierungsdeskriptoren sind Standardtextdateien im XML-Format, die in eine Web-Service-Anwendung gepackt werden. Optional können Sie den Implementierungsdeskriptor für Servicereferenzen, der in der Spezifikation Web Services for Java™ Platform, Enterprise Edition (Java EE) (JSR 109) definiert ist, verwenden, um Anwendungsmetadaten zu erweitern und zu überschreiben, die in Annotationen in JAX-WS-Web-Service-Clients (Java API for XML-Based Web Services) angegeben sind.
Vorbereitende Schritte
Zuerst müssen Sie mit dem Befehl wsimport die Web-Service-Clientartefakte aus einer WSDL-Datei (Web Services Description Language) generieren.
Informationen zu diesem Vorgang
Sie können service-ref-Einträge in den Java-EE-Implementierungsdeskriptoren application-client.xml, web.xml und ejb-jar.xml hinzufügen. Ein service-ref-Eintrag stellt eine Referenz auf einen Web-Service dar, der von einer Java-EE-Komponente in Web-, EJB- (Enterprise JavaBeans) oder Anwendungs-Client-Containern verwendet wird. Ein service-ref-Eintrag hat einen JNDI-Namen, der zum Suchen des Service verwendet wird. Wenn Sie den service-ref-Eintrag angeben, können die Clientanwendungen den Service über eine JNDI-Lookup-Operation suchen. Außerdem können Sie diese Servicereferenzen für die Ressourceninjektion verwenden.
Für jeden in einem der Implementierungsdeskriptoren gefundenen service-ref-Eintrag wird das entsprechende Serviceobjekt an den JNDI-Namespace gebunden, und die Portinformationen werden, sofern vorhanden, eingefügt. Der JAX-WS-Client kann jetzt eine JNDI-Lookup-Operation durchführen, um einen JAX-WS-Service oder eine Portinstanz abzurufen.
Wenn Sie ein Element service-ref definieren, das einen JAX-WS-Service darstellt, verwenden Sie die Unterklasse javax.xml.ws.Service, die vom Tool wsimport generiert wird, als Wert für service-interface. Dies ist die Klasse, die die Annotation "@WebServiceClient" enthält. Wenn Sie ein Element service-ref definieren, das einen JAX-WS-Port darstellt, ist der Wert von service-interface weiterhin die Unterklasse "javax.xml.ws.Service", die vom Tool wsimport generiert wird, und der Wert von service-ref-type gibt die vom Port verwendete Serviceendpunktschnittstellenklasse an. Die Serviceendpunktschnittstellenklasse wird ebenfalls von wsimport generiert und ist mit der Annotation "@WebService" annotiert.
Vorgehensweise
Ergebnisse
Sie können die Servicereferenzen, die im Implementierungsdeskriptor in Ihrer Clientanwendung definiert waren, jetzt verwenden. Außerdem können Sie Implementierungsdeskriptoren verwenden, um die mit den Annotationen @WebServiceRef und @Resource angegebenen Informationen zu erweitern oder zu überschreiben.
Das Implementierungsdeskriptorelement <lookup-name> ist in Java EE 6 neu und wird verwendet, um indirekt auf eine bereits definierte Servicereferenz zu verweisen. Wenn das Element <lookup-name> verwendet wird, kann nur noch das Element <service-ref-name> angegeben werden. Weitere untergeordnete Elemente von <service-ref> können nicht definiert werden.
Im folgenden Beispiel sehen Sie einen service-ref-Eintrag in einer Datei WEB-INF/web.xml, der eine Referenz auf einen JAX-WS-Service definiert, und einen service-ref-Eintrag in derselben Datei web.xml, der eine indirekte Referenz auf den ersten service-ref-Eintrag definiert:
<service-ref>
<service-ref-name>service/ExampleService</service-ref-name>
<service-interface>com.ibm.sample.ExampleService</service-interface>
<service-ref-type>com.ibm.sample.ExampleServicePortType</service-ref-type>
<wsdl-file>WEB-INF/wsdl/ExampleService.wsdl</wsdl-file>
</service-ref>
<service-ref>
<service-ref-name>service/ExampleService2</service-ref>
<lookup-name>java:comp/env/service/ExampleService</lookup-name>
</service-ref>
Angenommen, die zuvor gezeigten service-ref-Einträge sind in der Datei WEB-INF/web.xml definiert, dann könnte die Clientanwendung eine JNDI-Lookup-Operation mit dem Namen java:comp/env/service/ExampleService2 ausführen, und das Ergebnis wäre eine Referenz auf den Service ExampleService, der im WSDL-Dokument WEB-INF/wsdl/ExampleService.wsdl definiert, der mit dem ersten service-ref-Eintrag definiert wurde.
Nächste Schritte
Vervollständigen Sie die Clientimplementierung, indem Sie den Code für Ihre Clientanwendung schreiben, der zum Aufrufen des Web-Service verwendet wird.