Création de services Web avec état à l'aide des spécifications WSRF (Web Services Resource Framework)
Vous pouvez implémenter un service Web avec état en tant que ressource WS-Resource, et le référencer à l'aide d'une référence de noeud final WS-Addressing. Les ressources WS-Resources peuvent être développées de la même manière que les services Web habituels et à l'aide des même outils. Cependant certaines tâches supplémentaires sont nécessaires, comme l'explique cette rubrique.
Pourquoi et quand exécuter cette tâche
Effectuez cette tâche lorsque vous souhaitez créer une ressource WS-Resource, qui constitue une combinaison d'une ressource avec état et d'un service Web permettant d'accéder à la ressource. Pour effectuer cette tâche, il est nécessaire de connaître les bases du développement de services Web, ainsi que les spécifications WSRF (Web Services Resource Framework). Le document OASIS WSRF Primer présente les spécifications WSRF.
Procédure
Création d'un document de schéma de propriétés de ressources pour la ressource WS-Resource
Les exemples suivants correspondent aux étapes 2 à 4 de la procédure. Les exemples montrent comment une organisation informatique peut utiliser une instance WS-Resource pour gérer un réseau d'imprimantes. Une WS-Resource représente la combinaison d'une ressource et d'un service web par lequel la ressource est accessible. Les exemples supposent que l'organisation utilise actuellement les services Web pour gérer son réseau d'imprimantes, comme dans les exemples de Création d'une application de service Web JAX-RPC qui utilise WS-Addressing.
Comme décrit dans la spécification WS-Resource, qui fait partie de la spécification WSRF (Services Resource Framework), une ressource WS-Resource est accessible via une référence de noeud final WS-Addressing et l'état de cette ressource est conservé dans un document XML de propriétés de ressources. L'utilisation d'une ressource WS-Resource pour représenter les ressources avec état fournit une interopérabilité pour interagir avec la représentation de l'état des ressources à l'aide de messages de service Web standardisés.
<?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>