Les références de noeud final constituent un aspect essentiel du protocole
d'interopérabilité Web Services Addressing (WS-Addressing), car elle permettent
d'encapsuler de façon standard les informations relatives aux noeuds finaux de services
web spécifiques. Ce produit fournit des interfaces qui vous permettent de créer des références de noeud final à l'aide de l'API standard JAX-WS.
Pourquoi et quand exécuter cette tâche
Cette tâche est une sous-tâche de
Création d'une application de services Web JAX-WS qui utilise Web Services Addressing.
Effectuez cette tâche si vous développez une application qui utilise l'interface standard JAX-WS WS-Addressing. Ce type d'application nécessite des références de noeud final pour
cibler les noeuds finaux de service Web. L'interface standard JAX-WS est conçue pour créer uniquement des références de noeud finalet par conséquent comporte les restrictions suivantes :
- Vous ne pouvez pas créer de référence de noeud final hautement disponible, ni gérée par la charge de travail.
- Vous ne pouvez pas créer de référence de noeud final qui représente des beans session avec état.
- Vous ne pouvez pas utiliser de classe créée à l'aide de l'interface JAX-WS avec l'interface SPI WS-Addressing d'IBM.
Vous ne pouvez pas contourner ces restrictions en utilisant l'interface XS-Addressing d'IBM pour créer les références de noeud final et en les convertissant en références de noeud final JAX-WS standard à utiliser par le reste de l'application.
Procédure
- Si un noeud final doit créer une référence de noeud final qui se représente, utilisez la méthode getEndpointReference de l'objet de contexte de service web, en faisant passer un objet Elément représentant les paramètres de référence à associer à la référence de noeud final (ou un objet null si vous ne voulez pas spécifier de paramètres de référence).
Par défaut, cette méthode crée un objet W3CEndpointReference. Si vous voulez créer un objet SubmissionEndpointReference, qui représente un noeud final conforme à la spécification WS-Addressing 2004/08, faites passer le type de référence de noeud final en paramètre.
Par exemple, le fragment de code suivant utilise la méthode getEndpointReference pour retourner un objet W3CEndpointRerence auquel est associé un ID de ticket :...
@WebService(name="Calculator",
targetNamespace="http://calculator.org")
public class Calculator {
@Resource
WebServiceContext wsc;
...
// Create the ticket id
element = document.createElementNS(
"http://calculator.jaxws.axis2.apache.org", "TicketId");
element.appendChild( document.createTextNode("123456789") );
...
public W3CEndpointReference getEPR() {
// Get the endpoint reference and associate the ticket id
// with it as a reference parameter
W3CEndpointReference epr = (W3CEndpointReference)wsc.getEndpointReference(element);
return epr;
}
...
La ligne de code suivante indique comment créer une référence de noeud final 2004/08 pour l'exemple précédent :SubmissionEndpointReference epr = (SubmissionEndpointReference)
wsc.getEndpointReference(SubmissionEndpointReference.class, element);
- Si un noeud final doit créer une référence de noeud final qui représente un autre noeud, utilisez la classe W3CEndpointReferenceBuilder ou la classe SubmissionEndpointReferenceBuilder, en fonction de l'espace de nom que vous voulez utiliser.
- Créez une instance de la classe du générateur approprié. Utilisez la classe W3CEndpointReferenceBuilder si vous voulez créer une référence de noeud final conforme à la spécification WS-Addressing 2005/08. Utilisez la classe SubmissionEndpointReferenceBuilder
si vous voulez créer une référence de noeud final conforme à la spécification WS-Addressing 2004/08.
- Paramétrez la ou les propriété(s) suivante(s) de l'instance du générateur selon l'emplacement du noeud final.
- Si le noeud final se trouve dans un autre module de cette application, paramétrez les propriétés serviceName et endpointName aux valeurs appropriées.
Vous devez paramétrer la propriété serviceName avant de paramétrer la propriété endpointName, sinon l'application rejettera une erreur. La référence de noeud final retournée contient une adresse convenable pour le noeud final, tel qu'indiqué par l'implémentation.
Remarque : Ce comportement diffère de l'interface WS-Addressing d'IBM, en ceci que la création d'une référence de noeud final à l'aide de la méthode com.ibm.websphere.wsaddressing.EndpointReferenceManager.createEndpointReference(QName
serviceName, String endpointName) n'est pas limitée à des noeuds finals de la même application.
- Si le noeud final se trouve dans une autre application Java EE, paramétrez la propriété address de façon à pointer vers le noeud final.
- Facultatif : Paramétrez d'autres propriétés de l'instance du générateur si nécessaire. Par exemple, si le service Web est utilisé pour accéder à une instance de ressource, utilisez la propriété referenceParameter pour associer l'identifiant de la ressource à la référence de noeud final.
Pour plus d'informations sur les propriétés que vous pouvez paramétrer, consultez la documentation sur les API.
- Appelez la méthode build sur l'instance du générateur pour obtenir la référence du noeud final.
Par exemple, le fragment de code suivant utilise la classe W3CEndpointReferenceBuilder
pour obtenir une référence de noeud final conforme à la spécification 2005/08et pointe vers un noeud final qui se trouve dans une autre application :...
@WebService(name="Calculator", targetNamespace="http://calculator.org")
public class Calculator {
public W3CEndpointReference getEPR() {
...
// Create the builder object
W3CEndpointReferenceBuilder builder = new
W3CEndpointReferenceBuilder();
// Modify builder properties
builder.address(otherServiceURI);
// Create the endpoint reference from the builder object
W3CEndpointReference epr = builder.build();
return epr;
}
...
Le fragment de code suivant utilise la classe SubmissionEndpointReferenceBuilder
pour obtenir une référence de noeud final conforme à la spécification 2004/08 et pointe vers un noeud final qui se trouve dans un autre module de cette application :...
@WebService(name="Calculator", targetNamespace="http://calculator.org")
public class Calculator {
public W3CEndpointReference getEPR() {
...
// Create the builder object
SubmissionEndpointReferenceBuilder builder = new
SubmissionEndpointReferenceBuilder();
// Modify builder properties
builder.serviceName(calculatorService);
builder.endpointName(calculatorPort);
// Create the endpoint reference from the builder object
SubmissionEndpointReference epr = builder.build();
return epr;
}
...
Résultats
Vous avez créé une référence de noeud final à utiliser dans votre application.
Que faire ensuite
- Si besoin, convertissez la référence de noeud final en une instance de la classe com.ibm.websphere.wsaddressing.EndpointReference
class, en utilisant la méthode createIBMEndpointReference. Par exemple, sur un client, vous pouvez paramétrer la propriété d'adressage FaultTo pour les messages sortants. Vous ne pouvez pas paramétrer cette propriété à l'aide de l'interface JAX-WS, vous devez donc convertir la référence de noeud final représentant le noeud final FaultTo en une instance de la classe com.ibm.websphere.wsaddressing.EndpointReference, avant de la paramétrer comme propriété sur l'objet BindingProvider.
- Poursuivez par la section Création d'une application de services Web JAX-WS qui utilise Web Services Addressing.