Endpunktreferenzen sind ein primäres Konzept des Interoperabilitätsprotokolls Web Services Addressing
(WS-Addressing) und ein Standardmechanismus für die Kapselung von Informationen über bestimmte
Web-Service-Endpunkte. Dieses Produkt stellt Schnittstellen bereit, mit denen Sie über die Standardanwendungsprogramierschnittstelle der JAX-WS-API Endpunktreferenzen erstellen können.
Informationen zu diesem Vorgang
Diese Task ist eine Subtask von JAX-WS-Web-Service-Anwendung erstellen, die Web Services Addressing verwendet.
Führen Sie diese Task aus, wenn Sie eine Anwendung schreiben, die die WS-Addressing-Standardanwendungsprogrammierschnittstelle von JAX-WS verwendet.
Solche Anwendungen setzen Endpunktreferenzen voraus,
die auf Web-Service-Endpunkte verweisen.
Die JAX-WS-Standardanwendungsprogrammierschnittstelle ist nur für die Erstellung einfacher Endpunktreferenzen konzipiert und
hat deshalb die folgenden Einschränkungen:
- Sie können keine Endpunktreferenzen mit hoher Verfügbarkeit und Workload-Management erstellen.
- Sie können keine Endpunktreferenzen erstellen, die Stateful-Session-Beans darstellen.
- Sie können keine Klassen verwenden, die über die Anwendungsprogrammierschnittstelle von JAX-WS mit der IBM proprietären
WS-Addressing-Systemprogrammierschnittstelle (SPI) erstellt wurden.
Sie können diese Einschränkungen umgehen, indem Sie die IBM proprietäre WS-Addressing-Anwendungsprogrammierschnittstelle verwenden,
um die Endpunktreferenzen zu erstellen, und diese dann anschließend in Standardendpunktreferenzen von JAX-WS konvertieren, die vom Rest der Anwendung verwendet werden können.
- Wenn ein Endpunkt eine Endpunktreferenz erstellen muss, die sie selbst darstellt, verwenden Sie die Methode
"getEndpointReference" des Web-Service-Kontextobjekts so, dass Sie ein Objekt "Element" übergeben, dass die Referenzparameter darstellt,
die der Endpunktreferenz zugeordnet werden sollen (oder ein Objekt
null, wenn Sie keine Referenzparameter angeben möchten).
Standardmäßig erstellt diese Methode ein Objekt "W3CEndpointReference".
WEnn Sie ein Objekt "SubmissionEndpointReference" erstellen möchten, das einen Endpunkt darstellt, der der WS-Addressing-Spezifikation vom August 2004 entspricht,
übergeben Sie den Typ der Endpunktreferenz als Parameter.
Im folgenden Codefragment wird beispielsweise die Methode
"getEndpointReference" verwendet, um ein Objekt "W3CEndpointRerence" zurückzugeben, dem eine Ticket-ID zugeordnet ist:
...
@WebService(name="Calculator",
targetNamespace="http://calculator.org")
public class Calculator {
@Resource
WebServiceContext wsc;
...
// Ticket-ID erstellen
element = document.createElementNS(
"http://calculator.jaxws.axis2.apache.org", "TicketId");
element.appendChild( document.createTextNode("123456789") );
...
public W3CEndpointReference getEPR() {
// Endpunktreferenz abrufen und dieser die Ticket-ID als Referenzparameter
// zuordnen
W3CEndpointReference epr = (W3CEndpointReference)wsc.getEndpointReference(element);
return epr;
}
...
Die folgende Codezeile veranschaulicht, wie eine Endpunktreferenz gemäß der Spezifikation vom August 2004
für das vorherige Beispiel erstellt wird.SubmissionEndpointReference epr = (SubmissionEndpointReference)
wsc.getEndpointReference(SubmissionEndpointReference.class, element);
- Wenn ein Endpunkt eine Endpunktreferenz erstellen muss, die einen anderen Endpunkt darstellt, verwenden Sie je nach Namespace, den Sie verwenden möchten, entweder
die Klasse "W3CEndpointReferenceBuilder" oder die Klasse "SubmissionEndpointReferenceBuilder".
- Erstellen Sie eine Instanz der entsprechenden Builder-Klasse. Verwenden Sie die Klasse
"W3CEndpointReferenceBuilder", wenn Sie eine Endpunktreferenz erstellen möchten, die der WS-AddressingSpezifikation vom August 2005 entspricht.
Verwenden Sie die Klasse
"SubmissionEndpointReferenceBuilder", wenn Sie eine Endpunktreferenz erstellen möchten, die der WS-AddressingSpezifikation vom August 2004 entspricht.
- Setzen Sie die folgenden Eigenschaften der Builder-Instanz entsprechend der Position des Endpunkts.
- Wenn sich der Endpunkt in einem anderen Modul in dieser Anwendung befindet, setzen Sie die Eigenschaften "serviceName"
und "endpointName" auf die entsprechenden Werte. Sie müssen die Eigenschaft "serviceName" vor der
Eigenschaft "endpointName" setzen, da die Anwendung ansonsten einen Fehler auslöst.
Die zurückgegebene Endpunktreferenz enthält eine entsprechend der Implementierung geeignete Adresse für den Endpunkt.
Anmerkung: Dieses Verhalten weicht von dem der IBM WS-Addressing-Anwendungsprogrammierschnittstelle insofern ab, dass
die Erstellung einer Endpunktreferenz mit der Methode "com.ibm.websphere.wsaddressing.EndpointReferenceManager.createEndpointReference(QName
serviceName, String endpointName)" nicht auf Endpunkte in derselben Anwendung beschränkt ist.
- Wenn sich der Endpunkt in einer anderen Java EE-Anwendung befindet, setzen Sie die Eigenschaft address so, dass sie
auf den Endpunkt verweist.
- Optional: Setzen Sie gegebenenfalls weitere Eigenschaften der Builder-Instanz. Wenn der Web-Service beispielsweise für den Zugriff auf eine Ressourceninstanz verwendet wird,
verwenden Sie die Eigenschaft "referenceParameter", um der Endpunktreferenz die Kennung der Ressource zuzuordnen.
Weitere Informationen zu den Eigenschaften, die Sie setzen können, finden Sie in der
API-Dokumentation.
- Rufen Sie die Methode build in der Builder-Instanz auf, um die Endpunktreferenz abzurufen.
Im folgenden Codefragment wird beispielsweise die Klasse "W3CEndpointReferenceBuilder"
verwendet, um eine Endpunktreferenz abzurufen, die der Spezifikation vom August 2005 entspricht und auf einen Endpunkt verweist,
der sich in einer anderen Anwendung befindet:
...
@WebService(name="Calculator", targetNamespace="http://calculator.org")
public class Calculator {
public W3CEndpointReference getEPR() {
...
// Builder-Objekt erstellen
W3CEndpointReferenceBuilder builder = new
W3CEndpointReferenceBuilder();
// Builder-Eigenschaften ändern
builder.address(otherServiceURI);
// Endpunktreferenz aus dem Builder-Objekt erstellen
W3CEndpointReference epr = builder.build();
return epr;
}
...
Im folgenden Codefragment wird beispielsweise die Klasse "SubmissionEndpointReferenceBuilder"
verwendet, um eine Endpunktreferenz abzurufen, die der Spezifikation vom August 2004 entspricht und auf einen Endpunkt verweist,
der sich in einem anderen Modul in dieser Anwendung befindet:
...
@WebService(name="Calculator", targetNamespace="http://calculator.org")
public class Calculator {
public W3CEndpointReference getEPR() {
...
// Builder-Objekt erstellen
SubmissionEndpointReferenceBuilder builder = new
SubmissionEndpointReferenceBuilder();
// Builder-Eigenschaften ändern
builder.serviceName(calculatorService);
builder.endpointName(calculatorPort);
// Endpunktreferenz aus dem Builder-Objekt erstellen
SubmissionEndpointReference epr = builder.build();
return epr;
}
...