Creación de servicios web con estado utilizando la infraestructura de recursos de servicios web
Puede implementar un servicio web con estado como un WS-Resource y hacer referencia a éste utilizando una referencia de punto final de WS-Addressing. Puede desarrollar WS-Resources de la misma forma que los servicios web normales, utilizando las mismas herramientas. Sin embargo, debe completar algunas tareas adicionales, como se describe en este tema.
Acerca de esta tarea
Complete esta tarea cuando desee crear un WS-Resource, que es una combinación de un recurso con estado y un servicio web a través del cual se accede al recurso. Para completar esta tarea debe tener conocimientos de las tareas estándar de desarrollo de servicios web y las especificaciones de WSRF (infraestructura de recursos de servicios web). Si desea una introducción a la especificación WSRF, consulte el documento de OASIS WSRF Primer.
Procedimiento
Creación de un documento de esquema de propiedades de recurso para el WS-Resource
Los ejemplos siguientes corresponden a los pasos 2 a 4 del procedimiento. Los ejemplos muestran cómo una organización de TI podría utilizar una instancia de WS-Resource para gestionar una red de impresoras. Un WS-Resource es una combinación de un recurso y un servicio web a través del cual se accede al recurso. Los ejemplos presuponen que la organización está utilizando actualmente servicios web para gestionar su red de impresoras, como se describe en los ejemplos de Creación de una aplicación de servicio web JAX-RPC que utiliza el direccionamiento de servicios web.
Como se describe en la especificación de WS-Resource, que forma parte de la especificación de WSRF (Web Services Resource Framework - Infraestructura de recurso de servicios web), se accede a un WS-Resource mediante una referencia de punto final de WS-Addressing y se mantiene una vista sobre el estado del recurso en un documento XML de propiedades de recursos. El uso de un WS-Resource para representar recursos con estado proporciona un medio interoperativo para interactuar con la representación de estado de recursos utilizando mensajes de servicio web estandarizados.
<?xml version="1.0"?>
<xsd:schema ...
xmlns:pr="http://example.org/printer.xsd"
targetNamespace="http://example.org/printer.xsd" >
<xsd:element name="printer_properties">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="pr:printer_reference" />
<xsd:element ref="pr:printer_name" />
<xsd:element ref="pr:printer_state" />
<xsd:element ref="pr:printer_accepting_jobs" />
<xsd:element ref="pr:queued_job_count" />
<xsd:element ref="pr:operations_supported" />
<xsd:element ref="pr:document_format_supported" />
<xsd:element ref="pr:job_hold_until_default"
minOccurs="0" />
<xsd:element ref="pr:job_hold_until_supported"
minOccurs="0"
maxOccurs="unbounded" />
<xsd:element ref="wsrf-rp:QueryExpressionDialect"
maxOccurs="unbounded" />
<xsd:element ref="pr:job_properties" minOccurs="0"
maxOccurs="unbounded" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
...
</schema>
<wsdl:definitions targetNamespace="http://example.org/printer" ...
xmlns:wsrf-rp="http://docs.oasis-open.org/wsrf/rp-2"
xmlns:wsrf-rpw="http://docs.oasis-open.org/wsrf/rpw-2"
xmlns:wsa="http://www.w3.org/2005/08/addressing"
xmlns:pr="http://example.org/printer">
<wsdl:types>
...
<xsd:schema...>
<xsd:element name="CreatePrinterRequest"/>
<xsd:element name="CreatePrinterResponse"
type="wsa:EndpointReferenceType"/>
<xsd:import namespace="http://www.w3.org/2005/08/addressing"
schemaLocation="http://www.w3.org/2005/08/addressing/ws-addr.xsd"/>
<xsd:import namespace=http://docs.oasis-open.org/wsrf/rp-2
schemaLocation="http://docs.oasis-open.org/wsrf/rp-2.xsd"/>
</xsd:schema>
<!-- Importar definiciones de WSDL para GetResourceProperties -->
<wsdl:import namespace="http://docs.oasis-open.org/wsrf/rpw-2"
location="http://docs.oasis-open.org/wsrf/rpw-2.wsdl" />
</wsdl:types>
<wsdl:message name="CreatePrinterRequest">
<wsdl:part name="CreatePrinterRequest"
element="pr:CreatePrinterRequest" />
</wsdl:message>
<wsdl:message name="CreatePrinterResponse">
<wsdl:part name="CreatePrinterResponse"
element="pr:CreatePrinterResponse" />
</wsdl:message>
<!-- El tipo de puerto tiene un atributo ResourceProperties que hace referencia al
documento de propiedades -->
<wsdl:portType name="Printer" wsrf-rp:ResourceProperties="pr:printer_properties">
<wsdl:operation name="createPrinter">
<wsdl:input name="CreatePrinterRequest"
message="pr:CreatePrinterRequest" />
<wsdl:output name="CreatePrinterResponse"
message="pr:CreatePrinterResponse" />
</wsdl:operation>
<!-- La especificación WS-ResourceProperties necesita la operación GetResourceProperty -->
<wsdl:operation name="GetResourceProperty"
<wsdl:input name="GetResourcePropertyRequest"
message="wsrf-rpw:GetResourcePropertyRequest"
wsa:Action="http://docs.oasis-open.org/wsrf/rpw-2/GetResourceProperty/
GetResourcePropertyRequest"/>
<wsdl:output name="GetResourcePropertyResponse"
message="wsrf-rpw:GetResourcePropertyResponse"
wsa:Action="http://docs.oasis-open.org/wsrf/rpw-2/GetResourceProperty/
GetResourcePropertyResponse"/>
<wsdl:fault name="ResourceUnknownFault"
message="wsrf-rw:ResourceUnknownFault"/>
<wsdl:fault name="InvalidResourcePropertyQNameFault"
message="wsrf-rpw:InvalidResourcePropertyQNameFault" />
</wsdl:operation>
</wsdl:portType>
</wsdl:definitions>