You can implement a stateful web service as a WS-Resource, and reference it by using a WS-Addressing endpoint reference. You develop WS-Resources in the same way as ordinary web services, and by using the same tools. However, you must complete some additional tasks, as described in this topic.
Complete this task when you want to create a WS-Resource, which is a combination of a stateful resource and a web service through which the resource is accessed. To complete this task you must have knowledge of standard web services development tasks, and the Web Services Resource Framework (WSRF) specifications. For an introduction to the WSRF specifications, read the OASIS WSRF Primer document.
The following examples correspond to steps 2 to 4 in the procedure. The examples show how an IT organization might use a WS-Resource instance to manage a network of printers. A WS-Resource is a combination of a resource and a web service through which the resource is accessed. The examples assume that the organization is currently using web services to manage its printer network, as set out in the examples in Creating a JAX-RPC web service application that uses Web Services Addressing.
As described in the WS-Resource specification, which is part of the Web Services Resource Framework (WSRF) specification, a WS-Resource is accessed through a WS-Addressing endpoint reference, and a view on the state of its resource is maintained in a resources properties XML document. Use of a WS-Resource, for representing stateful resources, provides an interoperable means to interact with the state representation of resources by using standardized web service messages.
<?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> <!-- Import WSDL definitions for 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> <!-- The port type has a ResourceProperties attribute that references the resource properties document --> <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> <!-- The GetResourceProperty operation is required by the WS-ResourceProperties specification --> <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>
In this information ...Subtopics
Related concepts
Related tasks
Related reference
| IBM Redbooks, demos, education, and more(Index) |