Las referencias de punto final son un concepto primario del protocolo de interoperatividad del direccionamiento de servicios web (WS-Addressing) y proporcionan un mecanismo estándar para encapsular información sobre puntos finales específicos de servicio web. Este producto proporciona interfaces para crear referencias de punto final utilizando la API JAX-WS estándar.
Acerca de esta tarea
Esta tarea es una subtarea de Creación de una aplicación de servicio web JAX-WS que utiliza direccionamiento de servicios web.
Complete esta tarea si está escribiendo una aplicación que utiliza la API WS-Addressing JAX-WS estándar. Dichas aplicaciones requieren referencias de punto final que tengan como destino los puntos finales de servicio web. La API JAX-WS estándar está diseñada para crear sólo
referencias de punto final y, por consiguiente, tiene las restricciones siguientes:
- No puede crear referencias de punto final gestionadas de carga de trabajo o de alta disponibilidad.
- No puede crear referencias de punto final que representen beans de sesión con estado.
- No puede utilizar clases creadas utilizando la API JAX-WS con la SPI WS-Addressing propietaria de IBM.
Puede evitar estas restricciones utilizando la API WS-Addressing propietaria de IBM para crear las referencias de punto final y después convirtiéndolas en referencias de punto final estándar de JAX-WS que puedan utilizar el resto de las aplicaciones.
Procedimiento
- Si un punto final tiene que crear una referencia de punto final que se representa a sí misma,
utilice el método getEndpointReference del objeto de contexto de servicio web, pasando un objeto Element
que represente los parámetros de referencia a asociar con la referencia de punto final (o un objeto
null si no quiere especificar parámetros de referencia).
De forma predeterminada, este método crea un objeto W3CEndpointReference. Si quiere crear un objeto
SubmissionEndpointReference que represente un punto final que cumpla la especificación
2004/08 WS-Addressing, pase el tipo de referencia de punto final como parámetro.
Por ejemplo,
el fragmento de código siguiente utiliza el método getEndpointReference para devolver un objeto
W3CEndpointRerence que tenga un ID de ticket asociado:
...
@WebService(name="Calculator",
targetNamespace="http://calculator.org")
public class Calculator {
@Resource
WebServiceContext wsc;
...
// Crear el id de ticket
element = document.createElementNS(
"http://calculator.jaxws.axis2.apache.org", "TicketId");
element.appendChild( document.createTextNode("123456789") );
...
public W3CEndpointReference getEPR() {
// Obtener la referencia de punto final y asociar el id de ticket
// a ésta como un parámetro de referencia
W3CEndpointReference epr = (W3CEndpointReference)wsc.getEndpointReference(element);
return epr;
}
...
La línea de código siguiente muestra cómo crear una referencia de punto final
2004/08 para el ejemplo anterior:
SubmissionEndpointReference epr = (SubmissionEndpointReference)
wsc.getEndpointReference(SubmissionEndpointReference.class, element);
- Si un punto final tiene que crear una referencia de punto final que represente un
punto final distinto, utilice las clases W3CEndpointReferenceBuilder o SubmissionEndpointReferenceBuilder,
según el espacio de nombres que quiera utilizar.
- Cree una instancia de una clase de constructor adecuada. Utilice la clase
W3CEndpointReferenceBuilder si quiere crear una referencia de punto final que cumpla la
especificación 2005/08 WS-Addressing. Utilice la clase SubmissionEndpointReferenceBuilder
si quiere crear una referencia de punto final que cumpla la especificación 2004/08
WS-Addressing.
- Establezca la propiedad o propiedades siguientes de la instancia del constructor
según la ubicación del punto final.
- Si el punto final está en otro módulo de esta aplicación, establezca las propiedades serviceName
y endpointName en los valores correspondientes.
Debe establecer la propiedad serviceName
antes de establecer la propiedad endpointName; si no lo hace así, la aplicación lanzará un
error. La referencia de punto final que se devuelve contiene una dirección adecuada para
el punto final, según determina la implementación.
Nota: Este comportamiento es distinto de la API
WS-Addressing de IBM en tanto que la creación de una referencia de punto final que utilice
el método com.ibm.websphere.wsaddressing.EndpointReferenceManager.createEndpointReference(QName
serviceName, String endpointName) no está restringida a puntos finales de la misma aplicación.
- Si el punto final está en otra aplicación Java EE, establezca la propiedad
address de forma que apunte al punto final.
- Opcional: Establezca otras propiedades de la instancia del constructor según
sea necesario. Por ejemplo, si se utiliza el servicio web para acceder a una instancia de
recurso, utilice la propiedad referenceParameter para asociar el identificador del
recurso con la referencia de punto final.
Para obtener más información sobre las propiedades que puede
establecer, consulte la documentación API.
- Invoque el método build en la instancia del constructor
para obtener la referencia de punto final.
Por ejemplo, el fragmento de código siguiente utiliza la clase W3CEndpointReferenceBuilder
para obtener una referencia de punto final que cumpla la especificación 2005/08 y apunte a un punto final que esté en otra aplicación:...
@WebService(name="Calculator", targetNamespace="http://calculator.org")
public class Calculator {
public W3CEndpointReference getEPR() {
...
// Crear el objeto constructor
W3CEndpointReferenceBuilder builder = new
W3CEndpointReferenceBuilder();
// Modificar las propiedades del constructor
builder.address(otherServiceURI);
// Crear la referencia de punto final des del objeto constructor
W3CEndpointReference epr = builder.build();
return epr;
}
...
El fragmento de código siguiente utiliza la clase SubmissionEndpointReferenceBuilder para obtener una referencia de punto final que cumpla la especificación 2004/08
y apunte a un punto final que está en otro módulo de esta aplicación:
...
@WebService(name="Calculator", targetNamespace="http://calculator.org")
public class Calculator {
public W3CEndpointReference getEPR() {
...
// Crear el objeto constructor
SubmissionEndpointReferenceBuilder builder = new
SubmissionEndpointReferenceBuilder();
// Modificar las propiedades del constructor
builder.serviceName(calculatorService);
builder.endpointName(calculatorPort);
// Crear la referencia de punto final des del objeto constructor
SubmissionEndpointReference epr = builder.build();
return epr;
}
...
Resultados
Habrá creado una referencia de punto final para que la utilice la aplicación.
Qué hacer a continuación
- Si fuera necesario, convierta la referencia de punto final a una instancia de la clase com.ibm.websphere.wsaddressing.EndpointReference, utilizando el método
createIBMEndpointReference. Por ejemplo, es posible que en un cliente quiera establecer la propiedad
de direccionamiento de mensajes FaultTo para los mensajes de salida. No puede establecer esta propiedad utilizando la API JAX-WS, por lo que debe convertir la referencia de punto final que representa el punto final FaultTo en una instancia de la clase com.ibm.websphere.wsaddressing.EndpointReference, antes de establecerla como propiedad en el objeto BindingProvider.
- Continúe con Creación de una aplicación de servicio web JAX-WS que utiliza direccionamiento de servicios web.