- From: Nickolas Kavantzas <nickolas.kavantzas@oracle.com>
- Date: Tue, 24 May 2005 20:01:58 -0700
- To: "Nickolas Kavantzas" <nickolas.kavantzas@oracle.com>, "WS-Choreography List" <public-ws-chor@w3.org>
- Message-ID: <008801c560d6$1de93de0$538e1990@us.oracle.com>
Sorry, small mistake. Please replace "withdraw" with "handlePurchaseOrder" in the text below.
Thanks,
Nick
----- Original Message -----
From: Nickolas Kavantzas
To: WS-Choreography List
Sent: Tuesday, May 24, 2005 7:53 PM
Subject: Nick's example of WS-CDL exceptions with WSDL 1.1 & WSDL 2.0
Hi all,
Below is my example for demonstrating WS-CDL interactions throwing exceptions,
based on the current WS-CDL spec semantics.
The example was taken from section 2.5.2.3 of the latest WS-CDL WD.
I then wrote the WSDL 1.1 and 2.0 definitions associated with the WS-CDL script.
Regards,
--
Nick
---------------------------------------------------------------------
---------------------------------------------------------------------
WSDL 1.1:
<?xml version="1.0" encoding="utf-8" ?>
<definitions
xmlns="http://schemas.xmlsoap.org/wsdl/"
targetNamespace="http://www.oracle.com/nick/intfsample"
xmlns:tns=http://www.oracle.com/nick/intfsample" >
<types>
<xsd:schema targetNamespace="...">
<xsd:element name="InvalidRequest" type="xsd:string"/>
</xsd:schema>
</types>
<message name="OutOfStockException" >
<part name="faultDetail" element="tns:InvalidRequest" />
</message>
<portType ... >
<operation name="withdraw" ...>
<input name="inp" message="..."/>
<output name="outp" message="..."/>
<fault name="flt" message="tns:OutOfStockException"/>
</operation>
</portType >
...
</definitions>
---------------------------------------------------------------------
WSDL 2.0:
<?xml version="1.0" encoding="utf-8" ?>
<description
xmlns="http://www.w3.org/2005/05/wsdl"
targetNamespace="http://www.oracle.com/nick/intfsample"
xmlns:tns=http://www.oracle.com/nick/intfsample" >
<types>
<xsd:schema targetNamespace="...">
<xsd:element name="InvalidRequest" type="xsd:string"/>
</xsd:schema>
</types>
<interface ... >
<fault name = "OutOfStockException"
element = "tns:InvalidRequest"/>
<operation name="withdraw"
pattern="http://www.w3.org/2005/05/wsdl/in-out"
style="http://www.w3.org/2005/05/wsdl/style/uri"
safe = "true">
<input messageLabel="In"
element="..." />
<output messageLabel="Out"
element="..." />
<outfault ref="tns:OutOfStockException" messageLabel="Out"/>
</operation>
</interface>
...
</description>
---------------------------------------------------------------------
WS-CDL example:
<?xml version="1.0" encoding="UTF-8"?>
<package xmlns="http://www.w3.org/2004/12/ws-chor/cdl"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.oracle.com/nick/sample"
xmlns:tns=http://www.oracle.com/nick/sample"
xmlns:cwns=http://www.oracle.com/nick/intfsample"
name="ConsumerRetailerChoreography"
version="1.0">
<informationType name="purchaseOrderType" type="tns:PurchaseOrderMsg"/>
<informationType name="purchaseOrderAckType" type="tns:PurchaseOrderAckMsg"/>
<!-- The informationType "badPOAckType" is of type Exception Type and refers
to the WSDL 1.1 message name "cwns:OutOfStockException" or
to the WSDL 2.0 fault name "cwns:OutOfStockException"
-->
<informationType name="badPOAckType"
element="cwns:OutOfStockException"
exceptionType="true"/>
<token name="purchaseOrderID" informationType="tns:intType"/>
<token name="retailerRef" informationType="tns:uriType"/>
<tokenLocator tokenName="tns:purchaseOrderID"
informationType="tns:purchaseOrderType" query="/PO/orderId"/>
<tokenLocator tokenName="tns:purchaseOrderID"
informationType="tns:purchaseOrderAckType" query="/PO/orderId"/>
<roleType name="Consumer">
<behavior name="consumerForRetailer" interface="tns:ConsumerRetailerPT"/>
<behavior name="consumerForWarehouse" interface="tns:ConsumerWarehousePT"/>
</roleType>
<roleType name="Retailer">
<behavior name="retailerForConsumer" interface="tns:RetailerConsumerPT"/>
</roleType>
<relationshipType name="ConsumerRetailerRelationship">
<role type="tns:Consumer" behavior="consumerForRetailer"/>
<role type="tns:Retailer" behavior="retailerForConsumer"/>
</relationshipType>
<channelType name="ConsumerChannel">
<role type="tns:Consumer"/>
<reference>
<token name="tns:consumerRef"/>
</reference>
<identity>
<token name="tns:purchaseOrderID"/>
</identity>
</channelType>
<channelType name="RetailerChannel">
<passing channel="ConsumerChannel" action="request" />
<role type="tns:Retailer" behavior="retailerForConsumer"/>
<reference>
<token name="tns:retailerRef"/>
</reference>
<identity>
<token name="tns:purchaseOrderID"/>
</identity>
</channelType>
<choreography name="ConsumerRetailerChoreography" root="true">
<relationship type="tns:ConsumerRetailerRelationship"/>
<variableDefinitions>
<variable name="purchaseOrder" informationType="tns:purchaseOrderType"
silent="true" />
<variable name="purchaseOrderAck"
informationType="tns:purchaseOrderAckType" />
<variable name="retailer-channel" channelType="tns:RetailerChannel"/>
<variable name="consumer-channel" channelType="tns:ConsumerChannel"/>
<variable name="badPurchaseOrderAck"
informationType="tns:badPOAckType" roleTypes="tns:Consumer"/>
<variable name="badPurchaseOrderAck"
informationType="tns:badPOAckType" roleTypes="tns:Retailer"
silent="true" />
</variableDefinitions>
<interaction name="createPO"
channelVariable="tns:retailer-channel"
operation="handlePurchaseOrder" align="true"
initiate="true">
<participate relationshipType="tns:ConsumerRetailerRelationship"
fromRole="tns:Consumer" toRole="tns:Retailer"/>
<exchange name="request"
informationType="tns:purchaseOrderType" action="request">
<send variable="cdl:getVariable("tns:purchaseOrder", ...)" />
<receive variable="cdl:getVariable("tns:purchaseOrder", ...)"
recordReference="record-the-channel-info" />
</exchange>
<exchange name="response"
informationType="purchaseOrderAckType" action="respond">
<send variable="cdl:getVariable("tns:purchaseOrderAck", ...)" />
<receive variable="cdl:getVariable("tns:purchaseOrderAck", ...)" />
</exchange>
<exchange name="badPurchaseOrderAckException"
informationType="badPOAckType" action="respond">
<send variable="cdl:getVariable("tns:badPurchaseOrderAck", ...)"
causeException="true" />
<receive variable="cdl:getVariable("tns:badPurchaseOrderAck", ...)"
causeException="true" />
</exchange>
<record name="record-the-channel-info" when="after">
<source variable="cdl:getVariable("tns:purchaseOrder, "",
"PO/CustomerRef")"/>
<target variable="cdl:getVariable("tns:consumer-channel", ...)"/>
</record>
</interaction>
</choreography>
</package>
Received on Wednesday, 25 May 2005 03:02:19 UTC