Java API for XML based Web Services

Die Java™ API for XML-based Web Services (JAX-WS), auch bekannt als JSR 224, ist ein Programmiermodell für Web-Services der nächsten Generation, das die vom Programmiermodell Java API for XML-based RPC (JAX-RPC) gelegten Grundlagen erweitert. Die Verwendung von JAX-WS vereinfacht die Entwicklung von Web-Services und -Clients und bietet durch den Einsatz von dynamischen Proxys und Java-Annotationen eine größere Plattformunabhängigkeit. Die in diesem Produkt enthaltenen Web-Service-Tools unterstützen JAX-WS 2.0, 2.1 und 2.2.

JAX-WS ist ein neues Programmiermodell, das die Anwendungsentwicklung vereinfacht. Unterstützt wird ein annotationsbasiertes Modell für die Entwicklung von Web-Service-Anwendungen und -Clients. Strategisch gesehen folgt der JAX-WS-Programmierstandard dem aktuellen Branchentrend hin zu einem mehr dokumentzentrierten Messaging-Modell und ersetzt das von JAX-RPC definierte Programmiermodell mit fernen Prozeduraufrufen. Dieses Produkt bietet noch Unterstützung für das Programmiermodell JAX-RPC, obwohl es in JAX-RPC Einschränkungen gibt. Viele aktuelle dokumentzentrierte Services werden von JAX-RPC nicht unterstützt. JAX-WS ist das strategische Programmiermodell für die Entwicklung von Web-Services und ein erforderlicher Teil der Plattform Java EE 5.

Die Implementierung des JAX-WS-Programmierstandards resultiert in folgenden Verbesserungen für die Entwicklung von Web-Services und -Clients:
Bessere Plattformunabhängigkeit für Java-Anwendungen
Die Verwendung von JAX-WS-APIs vereinfacht die Entwicklung von Web-Services und -Clients und ermöglicht eine größere Plattformunabhängigkeit von Java-Anwendungen. JAX-WS profitiert von dynamischen Proxys. JAX-RPC verwendet dagegen generierte Stubs. Der dynamische Proxy-Client ruft einen Web-Service auf der Basis einer generierten oder bereitgestellten Serviceendpunktschnittstelle (SEI, Service Endpoint Interface) auf. Der dynamische Proxy-Client ähnelt dem Stub-Client im JAX-RPC-Programmiermodell. Obwohl der dynamische Proxy-Client von JAX-WS genau wie der Stub-Client von JAX-RPC auf der aus einer WSDL-Datei generierten Serviceendpunktschnittstelle basiert, gibt es doch einen wichtigen Unterschied zwischen beiden Clients. Der dynamische Proxy-Client wird in der Laufzeit mit den Java-5-Funktionen für dynamische Proxys dynamisch generiert. Der JAX-RPC-basierte Stub-Client ist dagegen eine nicht portierbare Java-Datei, die von Tools generiert wird. Anders als bei den JAX-RPC-Stub-Clients müssen Sie beim dynamischen Proxy-Client nicht erneut einen Stub generieren, bevor Sie den Client in einem Anwendungsserver eines anderen Anbieters ausführen, da für die generierte Schnittstelle keine konkreten Anbieterinformationen erforderlich sind. Weitere Informationen zur Verwendung dynamischer Proxy-Clients finden Sie in Kapitel 4 der Spezifikation JAX-WS 2.0.
Annotationen

Mit JAX-WS wird die Unterstützung für die Annotation von Java-Klassen eingeführt, durch die angezeigt wird, dass die Java-Klasse ein Web-Service ist. JAX-WS unterstützt die Verwendung von Annotationen gemäß den Spezifikationen JSR 175 (A Metadata Facility for the Java Programming Language) und JSR 181 (Web Services Metadata for the Java Platform) sowie von Annotationen, die in JAX-WS 2.0 definiert sind. Durch die Verwendung von Annotationen im Java-Quellcode und in der Java-Klasse wird die Entwicklung von Web-Services einfacher. Mit den Annotationen werden einige der Zusatzinformationen definiert, die normalerweise aus Implementierungsdeskriptordateien, WSDL-Dateien oder Zuordnungsmetadaten von XML- und WSDL-Dateien für die Quellenartefakte abgerufen werden.

Sie können in den Java-Quellcode beispielsweise ein einfaches Tag @WebService aufnehmen, um die Bean als Web-Service zugänglich zu machen.

@WebService 

public class QuoteBean implements StockQuote {

       public float getQuote(String sym) { ... }

}

Die Annotation @WebService teilt der Serverlaufzeitumgebung mit, dass alle öffentlichen Methoden dieser Bean als ein Web-Service zugänglich gemacht werden sollen. Durch das Hinzufügen weiterer Annotationen für einzelne Methoden und Parameter ist eine zusätzliche Differenzierung und Unterteilung möglich. Mit Annotationen können Java-Artefakte viel einfacher als Web-Services zugänglich gemacht werden. Wenn Artefakte mit einigen der Top-down-Zuordnungstools mit einer WSDL-Datei als Ausgangspunkt erstellt werden, können Annotationen außerdem in den Quellcode und in Java-Klassen aufgenommen werden, um neben den Quellendateien auch die Metadaten zu erfassen.

Web-Services asynchron aufrufen

Mit JAX-WS können Web-Services sowohl synchron als auch asynchron aufgerufen werden. JAX-WS bietet beim asynchronen Aufrufen von Web-Services Unterstützung für einen Abfragemechanismus und für einen Callback-Mechanismus. Bei Verwendung eines Abfragemodells kann ein Client eine Abfrage absetzen und daraufhin ein Antwortobjekt erhalten, das abgefragt wird, um festzustellen, ob der Server geantwortet hat. Wenn der Server antwortet, wird die eigentliche Antwort abgerufen. Wenn das Abfragemodell verwendet wird, kann der Client mit anderen Arbeitsschritten fortfahren und muss dafür nicht auf den Erhalt der Antwort warten. Bei der Verwendung des Callback-Modells stellt der Client einen Callback-Handler bereit, der das eingehende Antwortobjekt akzeptiert und verarbeitet. Beim Abfrage- und beim Callback-Modell kann sich der Client auf die Fortsetzung seiner Arbeit konzentrieren, während er gleichzeitig ein dynamischeres und effizienteres Modell für das Aufrufen von Web-Services bereitstellt.

Eine Web-Service-Schnittstelle hat beispielsweise Methoden für synchrone und asynchrone Anfragen.

@WebService
public interface CreditRatingService {
      // synchrone Operation
      Score      getCreditScore(Customer customer);
      // asynchrone Operation mit Abfrage
      Response<Score> getCreditScoreAsync(Customer customer);
      // asynchrone Operation mit Callback
      Future<?> getCreditScoreAsync(Customer customer, 
         AsyncHandler<Score> handler);
}

Der asynchrone Aufruf, bei dem der Callback-Mechanismus verwendet wird, erfordert eine zusätzliche Eingabe vom Clientprogrammierer. Der Callback-Handler ist ein Objekt, das den Anwendungscode enthält, der beim Empfang einer asynchronen Antwort ausgeführt wird. Das folgende Codebeispiel zeigt einen asynchronen Callback-Handler:

CreditRatingService svc = ...;

Future<?> invocation = svc.getCreditScoreAsync(customerFred,
	new AsyncHandler<Score>() {
	   public void handleResponse (
	       Response<Score> response)
	     {
	       Score score = response.get();
	       // hier Arbeiten ausführen...
	     }
   }
);

Das folgende Codebeispiel zeigt einen asynchronen Abfrageclient:

CreditRatingService svc = ...;
Response<Score> response = svc.getCreditScoreAsync(customerFred);

while (!response.isDone()) {
		// Aktivität während der Wartezeit ausführen
}

// dank generischer Werte keine Umsetzung nötig
Score score = response.get();
</Score>
Ressourceninjektion

JAX-WS unterstützt die Ressourceninjektion, um die Entwicklung von Web-Services noch weiter zu vereinfachen. JAX-WS verwendet diese Schlüsselfunktion von Java EE 5, um den Aufwand für die Erstellung und Initialisierung allgemeiner Ressourcen in einer Java-Laufzeitumgebung von Ihrer Web-Service-Anwendung auf die Umgebung des Anwendungscontainers selbst zu verlagern. Die Laufzeitumgebung von JAX-WS unterstützt einen Teil der Annotationen, die in JSR 250 für Ressourceninjektion und Anwendungslebenszyklus definiert sind.

Der Anwendungsserver unterstützt außerdem die Verwendung der Annotation @Resource oder @WebServiceRef, um mit JAX-WS verwaltete Clients zu deklarieren und um die Injektion von JAX-WS-Services und -Ports anzufordern. Wird eine dieser Annotationen in einem Feld oder in einer Methode verwendet, bewirkt dies die Injektion einer JAX-WS-Service- oder -Portinstanz. Außerdem wird bei Verwendung dieser Annotationen der von der Annotation angegebene Typ in den JNDI-Namespace gebunden.

Die Annotation @Resource ist in JSR 250 (Spezifikation "Common Annotations") definiert, die Teil von Java Platform, Enterprise Edition 5 (Java EE 5) ist. Wenn Sie die Annotation @Resource in einer Variablen des Typs javax.xml.ws.WebServiceContext in die Implementierungsklasse eines Serviceendpunkts einfügen, können Sie eine Ressourceninjektion anfordern und die Schnittstelle javax.xml.ws.WebServiceContext, die sich auf diesen bestimmten Endpunktaufruf bezieht, erfassen. Über die Schnittstelle WebServiceContext können Sie den Nachrichtenkontext (MessageContext) für die Anforderung, die dem jeweiligen Methodenaufruf zugeordnet ist, mit der Methode getMessageContext() erfassen.

Das folgende Beispiel veranschaulicht die Verwendung der Annotationen @Resource und @WebServiceRef für die Ressourceninjektion:
@WebService
public class MyService {
    
    @Resource
    private WebServiceContext ctx;

    @Resource
    private SampleService svc;

    @WebServiceRef
    private SamplePort port;

    public String echo (String input) {
        …
    }
     
}

Weitere Informationen zur Ressourceninjektion finden Sie in den Abschnitten 5.2.1 und 5.3 der JAX-WS-Spezifikation.

Datenbindung mit JAXB 2.2
JAX-WS nutzt die API JAXB und Tools als Bindungstechnologie für die Zuordnung von Java-Objekten und XML-Dokumenten. Die JAX-WS-Tools stützen sich bei der Standarddatenbindung für bidirektionale Zuordnung von Java-Objekten und XML-Dokumenten auf JAXB-Tools. Die Datenbindung gemäß JAXB ersetzt die in der Spezifikation JAX-RPC beschriebene Datenbindung.

WebSphere Application Server Version 7.0 unterstützt die Spezifikation JAXB 2.1. JAX-WS 2.1 erfordert JAXB 2.1 für die Datenbindung. JAXB 2.1 stellt Erweiterungen bereit, z. B. eine verbesserte Kompilierungsunterstützung und Unterstützung für Annotationen vom Typ @XMLSeeAlso sowie volle Unterstützung für Schema 1.0.

WebSphere Application Server Version ab Version 8.0 und WebSphere Application Server Liberty Profile Version 8.5.5 bieten Unterstützung für die Spezifikation JAXB 2.2. JAX-WS 2.2 erfordert JAXB 2.2 für die Datenbindung. JAXB 2.2 bietet kleinere funktionale Erweiterungen für eine verbesserte Schemagenerierung und eine bessere Integration von JAX-WS.

Dynamische und statische Clients
Die API für dynamische Clientprogrammierung für JAX-WS wird als Dispatch-Client bezeichnet (javax.xml.ws.Dispatch). Der Dispatch-Client ist ein am XML-Messaging orientierter Client. Die Daten werden im Modus PAYLOAD oder MESSAGE gesendet. Bei Verwendung des Modus PAYLOAD ist der Dispatch-Client nur für die Bereitstellung des Inhalts des Elements <soap:Body> zuständig. Die Elemente <soap:Envelope> und <soap:Header> werden von JAX-WS hinzugefügt. Bei Verwendung des Modus MESSAGE ist der Dispatch-Client für die Bereitstellung des gesamten SOAP-Envelope, einschließlich der Elemente <soap:Envelope>, <soap:Header> und <soap:Body>, verantwortlich. Die Nachricht wird von JAX-WS nicht ergänzt. Der Dispatch-Client unterstützt asynchrone Aufrufe über einen Callback- oder Abfragemechanismus. </soap:Body></soap:Header></soap:Envelope></soap:Header></soap:Envelope></soap:Body>

Das Programmiermodell für statische Clients von JAX-WS wird als Proxy-Client bezeichnet. Der Proxy-Client ruft einen Web-Service auf der Basis einer generierten oder bereitgestellten Serviceendpunktschnittstelle (SEI, Service Endpoint Interface) auf.

MTOM-Unterstützung
Wenn Sie JAX-WS verwenden, können Sie binäre Anhänge, z. B. Bilder oder Dateien, zusammen mit Web-Service-Anforderungen senden. JAX-WS bietet Unterstützung für eine optimierte Übertragung binärer Daten gemäß MTOM-Spezifikation (Message Transmission Optimization Mechanism).
Mehrere Nutzdatenstrukturen
JAX-WS macht die folgenden Bindungstechnologien für den Benutzer zugänglich: XML Source, SOAP Attachments API for Java (SAAJ) 1.3 und Java Architecture for XML Binding (JAXB) 2.0. Mit XML Source kann ein Benutzer eine javax.xml.transform.Source als Repräsentanz der Daten in einem Quellenobjekt an die Laufzeit übergeben. SAAJ 1.3 ermöglicht jetzt die Übergabe eines vollständigen SOAP-Dokuments über die Schnittstelle. Früher konnten nur die eigentlichen Nutzdaten übergeben werden. Hierfür übergibt der Client das SAAJ-Objekt SOAPMessage über die Schnittstelle. JAX-WS nutzt die JAXB-2.0-Unterstützung als bevorzugte Technologie für die Java- und XML-Datenbindung.
SOAP-1.2-Unterstützung
In JAX-WS 2.0 ist Unterstützung für SOAP 1.2 hinzugekommen. JAX-WS unterstützt sowohl SOAP 1.1 als auch SOAP 1.2. SOAP 1.2 ermöglicht eine genauere Definition des SOAP-Verarbeitungsmodells, was die Mehrdeutigkeiten aufhebt, die manchmal zu Problemen bei der Interoperabilität führen, wenn keine WS-I-Profile (Web Services Interoperability) vorhanden sind. SOAP 1.2 soll das Risiko von Interoperabilitätsproblemen mit Implementierungen von SOAP Version 1.2 zwischen Anbietern verringern, ist jedoch nicht mit früheren Versionen interoperabel.
Unterstützung für Methodenparameter und Rückgabetypen
JAX-WS 2.2 unterstützt Methodenparameter und Rückgabetypen. In einer JAX-WS-Web-Service-Operation können Sie eine Web-Service-Operation mit einem Operationsparameter und einem optionalen Rückgabetyp definieren. Wenn der Operationsparameter und der Rückgabetyp eine leere Eigenschaft targetNamespace definieren, weil für die Eigenschaft targetNamespace der Wert "" mit der Annotation @WebParam oder @WebResult angegeben wurde, zeigt die JAX-WS-Laufzeitumgebung das folgende Verhalten:
  • Wenn die Operation den Stil DOCUMENT hat, ist der Parameterstil WRAPPED und der Parameter wird keinem Header zugeordnet. Ein leerer Namespace wird den Operationsparametern und -rückgabetypen zugeordnet.
  • Wenn der Parameterstil nicht WRAPPED ist, wird der mit der Annotation @WebParam oder @WebResult angegebene Wert des Parameters targetNamespace verwendet.

JAX-WS 2.1.6

Wenn ein JAX-WS-Web-Service aus einer Java-Klasse erstellt wird, werden die öffentlichen Methoden der Klasse als Operationen zugänglich gemacht und werden Teil des WSDL-Kontrakts des Web-Service. Die Zuordnung zwischen diesen Methoden und Operationen ist im Wesentlichen in JSR 181 und JSR 250 geregelt. Nach diesen Regeln werden eine öffentliche Methode einer Java-Klasse und ihre Hierarchie bis hin zu, aber nicht einschließlich java.lang.Object zugänglich gemacht, wenn die folgenden Bedingungen erfüllt sind:
  • Die Methode ist mit der Annotation @WebMethod oder @WebMethod(exclude=false) versehen und die übergeordnete Klasse enthält eine Annotation @WebService.
  • Die Methode enthält keine Annotation @WebMethod, aber die übergeordnete Klasse enthält eine Annotation @WebService und keine weitere Methode ist mit der Annotation @WebMethod oder @WebMethod(exclude=false) versehen.
JAX-WS 2.1.6 ändert die Regeln, nach denen die Methoden einer Java-Klasse über die Web-Service-Schnittstelle zugänglich gemacht werden. Nach diesen geänderten Regeln werden eine öffentliche Methode einer Java-Klasse und ihre Hierarchie bis hin zu, aber nicht einschließlich java.lang.Object zugänglich gemacht, wenn die folgenden Bedingungen erfüllt sind:
  • Die Methode ist mit einer Annotation @WebMethod oder @WebMethod(exclude=false) versehen.
  • Die Methode enthält keine Annotation @WebMethod, aber die übergeordnete Klasse enthält eine Annotation @WebService.
Beispiel:
public class Base
{
  @WebMethod(exclude=false)
  public void superExposed(String s) {}
  public String supernoanno(String s) {}
}

@WebService
public class BeanImpl extends Base
{
  @WebMethod(exclude=false)
  public void exposed(String s) {}
  public String nonpublic(String s) {}
}
Bis JAX-WS 2.1.6 wurde nur die Methode public void exposed(String s) zugänglich gemacht. Ab JAX-WS 2.1.6 und in aktuelleren Versionen werden die folgenden Methoden zugänglich gemacht:
public void exposed(String s)
public String nonpublic(String s)
public void superExposed(String s)

WebSphere Application Server Version enthält diese Änderungen ab Version 7.0.0.7 in Form des IBM® JDK 6 SR6. Wenn Sie möchten, dass die Workbench Anweisungen für die Verwendung von JAX-WS 2.1.6 bereitstellt, wählen Sie Fenster > Benutzervorgaben > Allgemein > Servicerichtlinien > WebSphere-Programmiermodelle > JAX-WS aus und setzen Sie die Einstellung "Anleitungen für Methoden-Exposure von JAX-WS 2.1.6 und höher bereitstellen" auf wahr.

JAX-WS 2.2

Folgende Serverlaufzeitumgebungen bieten Unterstützung für die Spezifikationen JAX-WS Version 2.2 und JSR 109 (Web Services for Java EE Version 1.3):
  • WebSphere Application Server Liberty Profile Version 8.5.5
  • WebSphere Application Server Version 8.5
  • WebSphere Application Server Version 8.0

Die Spezifikation JAX-WS 2.2 beinhaltet die Funktionen der Spezifikation JAX-WS 2.1 sowie darüber hinausgehende Funktionen. In JAX-WS 2.2 ist clientseitige Unterstützung für die Verwendung WebServiceFeature-bezogener Annotationen wie @MTOM, @Addressing und @RespectBinding hinzugekommen. In JAX-WS 2.1 war zuvor die Unterstützung für diese Annotationen auf dem Server hinzugefügt worden. Mit der Spezifikation "Web Services for Java EE 1.3" wird darüber hinaus Unterstützung für diese WebServiceFeature-bezogenen Annotationen sowie für die Verwendung von Implementierungsdeskriptorelementen zum Konfigurieren dieser Features auf dem Client und dem Server eingeführt. JAX-WS 2.2 erfordert Java Architecture for XML Binding (JAXB) Version 2.2 für die Datenbindung.

Weitere Informationen zu JAX-WS finden Sie in der offiziellen Spezifikation JSR 224 unter JSR 224: Java API for XML-Based Web Services (JAX-WS) 2.0.

Symbol das den Typ des Artikels anzeigt. Konzeptartikel
Nutzungsbedingungen für Information Center | Feedback

Symbol für Zeitmarke Letzte Aktualisierung: 29.04.2014

Dateiname: cjaxws.html