Web Services Reengineering: Finishing Touches - Listing 12.8 The Complete SkatesTown Business Process
(Page 2 of 4 )
<?xml version="1.0" encoding="UTF-8"?>
<process name="purchaseOrderProcess"
targetNamespace="http://www.skatestown.com/
processes/purchaseOrderProcess"
xmlns:pos="http://www.skatestown.com/services/
interfaces/poSubmission.wsdl"
xmlns:skt="http://www.skatestown.com/services/
interfaces/skatestown.wsdl"
xmlns:sup="http://www.wheelsandboards.com/
services/interfaces/
orderSupplies.wsdl"
xmlns:plt="http://www.skatestown.com/processes/
poSubmissionPLT"
xmlns:ppa="http://www.skatestown.com/processes/
poSubmissionPPA"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns="http://schemas.xmlsoap.org/ws/2003/03/
business-process/">
<!-- PartnerLink definitions -->
<partnerLinks>
<partnerLink name="buyer"
partnerLinkType=
"plt:purchaseOrderPartnerLinkType"
myRole="seller"/>
<partnerLink name="local"
partnerLinkType="plt:localPartnerLinkType"
partnerRole="sellerLocal"/>
<partnerLink name="supplier"
partnerLinkType=
"plt:orderSuppliesPartnerLinkType"
myRole="seller" partnerRole="supplier"/>
</partnerLinks>
<!-- Partner definitions -->
<partners>
<partner name="skatestownCustomer">
<partnerLink name="buyer"/>
</partner>
<partner name="skatestown">
<partnerLink name="local"/>
</partner>
<partner name="skatestownSupplier">
<partnerLink name="supplier"/>
</partner>
</partners>
<!-- Variable definitions -->
<variables>
<variable name="poSubmissionRequest"
messageType="pos:poSubmissionRequest"/>
<variable name="poSubmissionResponse"
messageType="pos:poSubmissionResponse"/>
<variable name="poSubmissionFaultInvalidPO"
messageType=
"pos:poSubmissionFaultInvalidPO"/>
<variable name="poSubmissionFaultOutOfStock"
messageType=
"pos:poSubmissionFaultOutOfStock"/>
<variable name="cancelPurchaseOrderRequest"
messageType=
"pos:cancelPurchaseOrderRequest"/>
<variable name="validatePurchaseOrderResponse"
messageType=
"skt:validatePurchaseOrderResponse"/>
<variable name="checkLocalStockResponse"
messageType="skt:checkLocalStockResponse"/>
<variable name="orderSuppliesRequest"
messageType="sup:orderSuppliesRequest"/>
<variable name="orderSuppliesResponse"
messageType="sup:orderSuppliesResponse"/>
<variable name="orderSuppliesFault"
messageType="sup:orderSuppliesFault"/>
</variables>
<!-- Correlation set definitions -->
<correlationSets>
<correlationSet name="orderCorrelationSet"
properties="ppa:customerID
ppa:orderNumber"/>
</correlationSets>
<!-- Fault handler definitions -->
<faultHandlers>
<catch faultName="pos:invalidPO">
<sequence>
<assign>
<copy>
<from variable="poSubmissionRequest"
part="purchaseOrder"
query="/billTo/id"/>
<to variable=
"poSubmissionFaultInvalidPO"
part="customerID"/>
</copy>
<copy>
<from variable="poSubmissionRequest"
part="purchaseOrder" query="/id"/>
<to
variable="poSubmissionFaultInvalidPO"
part="orderNumber"/>
</copy>
</assign>
<reply partnerLink="buyer"
portType="pos:poSubmissionPortType"
operation="poSubmission"
faultName="pos:invalidPO"
variable="poSubmissionFaultInvalidPO">
<correlations>
<correlation set="orderCorrelationSet"
initiate="no"/>
</correlations>
</reply>
</sequence>
</catch>
<catch faultName="pos:outOfStock">
<sequence>
<assign>
<copy>
<from variable="poSubmissionRequest"
part="purchaseOrder"
query="/billTo/id"/>
<to
variable="poSubmissionFaultInvalidPO"
part="customerID"/>
</copy>
<copy>
<from variable="poSubmissionRequest"
part="purchaseOrder" query="/id"/>
<to
variable="poSubmissionFaultInvalidPO"
part="orderNumber"/>
</copy>
</assign>
<reply partnerLink="buyer"
portType="pos:poSubmissionPortType"
operation="poSubmission"
faultName="pos:outOfStock"
variable="poSubmissionFaultOutOfStock">
<correlations>
<correlation set="orderCorrelationSet"
initiate="no"/>
</correlations>
</reply>
</sequence>
</catch>
</faultHandlers>
<!-- Event handler definitions -->
<eventHandlers>
<onMessage partnerLink="buyer"
portType="pos:poSubmissionPortType"
operation="cancelPurchaseOrder"
variable="cancelPurchaseOrderRequest">
<correlations>
<correlation set="orderCorrelationSet"
initiate="no"/>
</correlations>
<terminate/>
</onMessage>
</eventHandlers>
<!-- Activity definitions -->
<sequence>
<receive partnerLink="buyer"
portType="pos:poSubmissionPortType"
operation="poSubmission"
createInstance="yes"
variable="poSubmissionRequest">
<correlations>
<correlation set="orderCorrelationSet"
initiate="yes"/>
</correlations>
</receive>
<flow>
<links>
<link name="validPurchaseOrder"/>
<link name="invalidPurchaseOrder"/>
<link name="inLocalStock_initiateDelivery"/>
<link name="inLocalStock_createInvoice"/>
<link name="notInLocalStock"/>
<link
name="stockReplenished_initiateDelivery"/>
<link
name="stockReplenished_createInvoice"/>
</links>
<invoke partnerLink="local"
portType="skt:skatestownPortType"
operation="validatePurchaseOrder"
inputVariable="poSubmissionRequest"
outputVariable=
"validatePurchaseOrderResponse">
<source linkName="validPurchaseOrder"
transitionCondition=
"bpws:getVariableData(
'validatePurchaseOrderResponse',
'valid')=true"/>
<source linkName="invalidPurchaseOrder"
transitionCondition=
"bpws:getVariableData(
'validatePurchaseOrderResponse',
'valid')=false"/>
</invoke>
<throw faultName="pos:invalidPO">
<target linkName="invalidPurchaseOrder"/>
</throw>
<invoke partnerLink="local"
portType="skt:skatestownPortType"
operation="checkLocalStock"
inputVariable="poSubmissionRequest"
outputVariable="checkLocalStockResponse">
<target linkName="validPurchaseOrder"/>
<source linkName=
"inLocalStock_initiateDelivery"
transitionCondition=
"bpws:getVariableData(
'checkLocalStockResponse','available')
=true"/>
<source
linkName="inLocalStock_createInvoice"
transitionCondition=
"bpws:getVariableData(
'checkLocalStockResponse','available')
=true"/>
<source linkName="notInLocalStock"
transitionCondition=
"bpws:getVariableData(
'checkLocalStockResponse','available')
=false"/>
</invoke>
<sequence name="replenishStock">
<target linkName="notInLocalStock"/>
<source
linkName="stockReplenished_initiateDelivery"/>
<source
linkName="stockReplenished_createInvoice"/>
<assign>
<copy>
<from variable="poSubmissionRequest"
part="purchaseOrder"/>
<to variable="orderSuppliesRequest"
part="orderSupplies"/>
</copy>
<copy>
<from partnerLink="supplier"
endpointReference="myRole"/>
<to variable="orderSuppliesRequest"
part="endpointReferenceOfSeller"/>
</copy>
</assign>
<while condition="bpws:getVariableData(
'checkLocalStockResponse','available')=
false">
<sequence>
<invoke partnerLink="supplier"
portType=
"sup:orderSuppliesPortType"
operation="orderSupplies"
inputVariable=
"orderSuppliesRequest">
<correlations>
<correlation
set="orderCorrelationSet"
initiate="no"/>
</correlations>
</invoke>
<pick>
<onMessage partnerLink="supplier"
portType=
"sup:orderSuppliesCallbackPortType"
operation="orderSuppliesOk"
createInstance="no"
variable=
"orderSuppliesResponse">
<correlations>
<correlation
set="orderCorrelationSet"
initiate="no"/>
</correlations>
<empty/>
</onMessage>
<onMessage partnerLink="supplier"
portType=
"sup:orderSuppliesCallbackPortType"
operation="orderSuppliesFailed"
createInstance="no"
variable="orderSuppliesFault">
<correlations>
<correlation
set="orderCorrelationSet"
initiate="no"/>
</correlations>
<throw faultName="pos:outOfStock"/>
</onMessage>
<onAlarm for="P1M">
<throw faultName="pos:outOfStock"/>
</onAlarm>
</pick>
<invoke partnerLink="local"
portType="skt:skatestownPortType"
operation="checkLocalStock"
inputVariable="poSubmissionRequest"
outputVariable=
"checkLocalStockResponse"/>
</sequence>
</while>
</sequence>
<invoke partnerLink="local"
portType="skt:skatestownPortType"
operation="initiateDelivery"
inputVariable="poSubmissionRequest">
<target linkName=
"inLocalStock_initiateDelivery"/>
<target
linkName="stockReplenished_initiateDelivery"/>
</invoke>
<invoke partnerLink="local"
portType="skt:skatestownPortType"
operation="createInvoice"
inputVariable="poSubmissionRequest"
outputVariable="poSubmissionResponse">
<target
linkName="inLocalStock_createInvoice"/>
<target
linkName="stockReplenished_createInvoice"/>
</invoke>
</flow>
<reply partnerLink="buyer"
portType="pos:poSubmissionPortType"
operation="poSubmission"
variable="poSubmissionResponse">
<correlations>
<correlation set="orderCorrelationSet"
initiate="no"/>
</correlations>
</reply>
</sequence>
</process>
Next: Advanced Considerations >>
More Web Services Articles
More By Sams Publishing
|
This article is excerpted from chapter 12 of Building Web Services with Java: Making sense of XML, SOAP, WSDL, and UDDI, written by Steve Graham et al. (Sams; ISBN: 0672326418). Check it out today at your favorite bookstore. Buy this book now.
|
|