[B]BPEL[/B] <bpel:process name="BookTrip" targetNamespace="http://booktrip.acme.com" suppressJoinFailure="yes" xmlns:bpel="http://docs.oasis-open.org/wsbpel/2.0/process/executable" xmlns:tns="http://booktrip.acme.com" xmlns:ns="http://provider.com" xmlns:ns1="http://message.flight.provider.com" xmlns:ns0="http://apartmentpackage"> <!-- Import the client WSDL --> <bpel:import namespace="http://apartmentpackage" locaxmlns:ns="http://provider.com" xmlns:msg="http://message.flight.provider.com"tion="ApartmentService.wsdl" importType="http://schemas.xmlsoap.org/wsdl/"></bpel:import> <bpel:import namespace="http://provider.com" location="FlightService.wsdl" importType="http://schemas.xmlsoap.org/wsdl/"></bpel:import> <bpel:import location="BookTripArtifacts.wsdl" namespace="http://booktrip.acme.com" importType="http://schemas.xmlsoap.org/wsdl/" /> <!-- ================================================================= --> <!-- PARTNERLINKS --> <!-- List of services participating in this BPEL process --> <!-- ================================================================= --> <bpel:partnerLinks> <!-- The 'client' role represents the requester of this service. --> <bpel:partnerLink name="client" partnerLinkType="tns:BookTrip" myRole="BookTripProvider" /> <bpel:partnerLink name="FlightServicePL" partnerLinkType="tns:FligtServicePLT" partnerRole="FlightServiceProvider"></bpel:partnerLink> <bpel:partnerLink name="ApartmentServicePL" partnerLinkType="tns:ApartmentServicePLT" partnerRole="ApartmentServiceProvider"></bpel:partnerLink> </bpel:partnerLinks> <!-- ================================================================= --> <!-- VARIABLES --> <!-- List of messages and XML documents used within this BPEL process --> <!-- ================================================================= --> <bpel:variables> <!-- Reference to the message passed as input during initiation --> <bpel:variable name="input" messageType="tns:BookTripRequestMessage"/> <!-- Reference to the message that will be returned to the requester --> <bpel:variable name="output" messageType="tns:BookTripResponseMessage"/> <bpel:variable name="FlightServicePLResponse" messageType="ns:bookFlightResponse"></bpel:variable> <bpel:variable name="FlightServicePLRequest" messageType="ns:bookFlightRequest"></bpel:variable> <bpel:variable name="ApartmentServicePLResponse" messageType="ns0:bookApartmentResponse"></bpel:variable> <bpel:variable name="ApartmentServicePLRequest" messageType="ns0:bookApartmentRequest"></bpel:variable> </bpel:variables> <!-- ================================================================= --> <!-- ORCHESTRATION LOGIC --> <!-- Set of activities coordinating the flow of messages across the --> <!-- services integrated within this business process --> <!-- ================================================================= --> <bpel:sequence name="main"> <!-- Receive input from requester. Note: This maps to operation defined in BookTrip.wsdl --> <bpel:receive name="receiveInput" partnerLink="client" portType="tns:BookTrip" operation="process" variable="input" createInstance="yes"/> <!-- Generate reply to synchronous request --> <bpel:assign validate="no" name="Assign"> <bpel:copy> <bpel:from> <bpel:literal xml:space="preserve"><impl:bookApartment xmlns:impl="http://apartmentpackage" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <impl:fromDate></impl:fromDate> <impl:toDate></impl:toDate> <impl:apartmentID></impl:apartmentID> </impl:bookApartment> </bpel:literal> </bpel:from> <bpel:to variable="ApartmentServicePLRequest" part="parameters"></bpel:to> </bpel:copy> <bpel:copy> <bpel:from part="payload" variable="input"> <bpel:query queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0"><![CDATA[tns:apartmentID]]></bpel:query> </bpel:from> <bpel:to part="parameters" variable="ApartmentServicePLRequest"> <bpel:query queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0"><![CDATA[ns0:apartmentID]]></bpel:query> </bpel:to> </bpel:copy> <bpel:copy> <bpel:from part="payload" variable="input"> <bpel:query queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0"> <![CDATA[tns:returnDate]]> </bpel:query> </bpel:from> <bpel:to part="parameters" variable="ApartmentServicePLRequest"> <bpel:query queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0"> <![CDATA[ns0:toDate]]> </bpel:query> </bpel:to> </bpel:copy> <bpel:copy> <bpel:from part="payload" variable="input"> <bpel:query queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0"><![CDATA[tns:departureDate]]></bpel:query> </bpel:from> <bpel:to part="parameters" variable="ApartmentServicePLRequest"> <bpel:query queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0"><![CDATA[ns0:fromDate]]></bpel:query> </bpel:to> </bpel:copy> </bpel:assign> <bpel:invoke name="Invoke" partnerLink="ApartmentServicePL" operation="bookApartment" portType="ns0:ApartmentService" inputVariable="ApartmentServicePLRequest" outputVariable="ApartmentServicePLResponse"></bpel:invoke> <bpel:assign validate="no" name="Assign1"> <bpel:copy> <bpel:from> <bpel:literal xml:space="preserve"><tns:BookTripResponse xmlns:tns="http://booktrip.acme.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <tns:apartmentBookingCode></tns:apartmentBookingCode> <tns:flightBookingCode></tns:flightBookingCode> <tns:carBookingCode></tns:carBookingCode> </tns:BookTripResponse> </bpel:literal> </bpel:from> <bpel:to variable="output" part="payload"></bpel:to> </bpel:copy> <bpel:copy> <bpel:from part="parameters" variable="ApartmentServicePLResponse"> <bpel:query queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0"><![CDATA[ns0:bookApartmentReturn/ns0:aptbooking/ns0:bookingID]]></bpel:query> </bpel:from> <bpel:to part="payload" variable="output"> <bpel:query queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0"><![CDATA[tns:apartmentBookingCode]]></bpel:query> </bpel:to> </bpel:copy> </bpel:assign> <bpel:reply name="replyOutput" partnerLink="client" portType="tns:BookTrip" operation="process" variable="output" /> </bpel:sequence> </bpel:process> [B]Apartment WSDL:[/B] <?xml version="1.0" encoding="UTF-8"?> <wsdl:definitions targetNamespace="http://apartmentpackage" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://apartmentpackage" xmlns:intf="http://apartmentpackage" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <!--WSDL created by Apache Axis version: 1.4 Built on Apr 22, 2006 (06:55:48 PDT)--> <wsdl:types> <schema elementFormDefault="qualified" targetNamespace="http://apartmentpackage" xmlns="http://www.w3.org/2001/XMLSchema"> <complexType name="StatusOfOperation"> <sequence> <element name="statusCode" nillable="true" type="xsd:int"/> <element name="statusCodeDescription" nillable="true" type="xsd:string"/> </sequence> </complexType> <element name="bookApartment"> <complexType> <sequence> <element name="fromDate" type="xsd:dateTime"/> <element name="toDate" type="xsd:dateTime"/> <element name="apartmentID" type="xsd:string"/> </sequence> </complexType> </element> <element name="bookApartmentResponse"> <complexType> <sequence> <element name="bookApartmentReturn" type="impl:ApartmentBookingResponse"/> </sequence> </complexType> </element> <complexType name="ApartmentBooking"> <sequence> <element name="apartmentID" nillable="true" type="xsd:string"/> <element name="bookingID" nillable="true" type="xsd:string"/> <element name="fromDate" nillable="true" type="xsd:dateTime"/> <element name="toDate" nillable="true" type="xsd:dateTime"/> </sequence> </complexType> <complexType name="ApartmentBookingResponse"> <sequence> <element name="aptbooking" nillable="true" type="impl:ApartmentBooking"/> <element name="bookApartmentStatus" nillable="true" type="impl:StatusOfOperation"/> </sequence> </complexType> <!--CUT--> <wsdl:message name="bookApartmentResponse"> <wsdl:part element="impl:bookApartmentResponse" name="parameters"/> </wsdl:message <wsdl:message name="bookApartmentRequest"> <wsdl:part element="impl:bookApartment" name="parameters"/> </wsdl:message> <!--CUT--> <wsdl:operation name="bookApartment"> <wsdl:input message="impl:bookApartmentRequest" name="bookApartmentRequest"/> <wsdl:output message="impl:bookApartmentResponse" name="bookApartmentResponse"/> </wsdl:operation> [B] Artifacts WSDL[/B] <?xml version="1.0" encoding="UTF-8" standalone="no"?> <definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:plnk="http://docs.oasis-open.org/wsbpel/2.0/plnktype" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://booktrip.acme.com" xmlns:vprop="http://docs.oasis-open.org/wsbpel/2.0/varprop" xmlns:wsdl="http://provider.com" xmlns:wsdl1="http://apartmentpackage" name="BookTrip" targetNamespace="http://booktrip.acme.com"> <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TYPE DEFINITION - List of types participating in this BPEL process The BPEL Designer will generate default request and response types but you can define or import any XML Schema type and use them as part of the message types. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ --> <plnk:partnerLinkType name="FligtServicePLT"> <plnk:role name="FlightServiceProvider" portType="wsdl:FlightService"/> </plnk:partnerLinkType> <plnk:partnerLinkType name="ApartmentServicePLT"> <plnk:role name="ApartmentServiceProvider" portType="wsdl1:ApartmentService"/> </plnk:partnerLinkType> <import location="FlightService.wsdl" namespace="http://provider.com"/> <import location="ApartmentService.wsdl" namespace="http://apartmentpackage"/> <types> <schema xmlns="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://booktrip.acme.com"> <element name="BookTripRequest"> <complexType> <sequence> <element name="departureFlightNumber" type="string"/> <element name="returnFlightNumber" type="string"/> <element name="apartmentID" type="string"/> <element name="carID" type="dateTime"/> <element name="departureDate" type="dateTime"/> <element name="returnDate" type="dateTime"/> </sequence> </complexType> </element> <element name="BookTripResponse"> <complexType> <sequence> <element name="apartmentBookingCode" type="string"/> <element name="flightBookingCode" type="string"/> <element name="carBookingCode" type="string"/> </sequence> </complexType> </element> </schema> </types> <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MESSAGE TYPE DEFINITION - Definition of the message types used as part of the port type defintions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ --> <message name="BookTripRequestMessage"> <part element="tns:BookTripRequest" name="payload"/> </message> <message name="BookTripResponseMessage"> <part element="tns:BookTripResponse" name="payload"/> </message> <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ PORT TYPE DEFINITION - A port type groups a set of operations into a logical service unit. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ --> <!-- portType implemented by the BookTrip BPEL process --> <portType name="BookTrip"> <operation name="process"> <input message="tns:BookTripRequestMessage"/> <output message="tns:BookTripResponseMessage"/> </operation> </portType> <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ PARTNER LINK TYPE DEFINITION ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ --> <plnk:partnerLinkType name="BookTrip"> <plnk:role name="BookTripProvider" portType="tns:BookTrip"/> </plnk:partnerLinkType> <binding name="BookTripBinding" type="tns:BookTrip"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="process"> <soap:operation soapAction="http://booktrip.acme.com/process"/> <input> <soap:body use="literal"/> </input> <output> <soap:body use="literal"/> </output> </operation> </binding> <service name="BookTrip"> <port binding="tns:BookTripBinding" name="BookTripPort"> <soap:address location="http://localhost:8180/ode/processes/BookTrip"/> </port> </service> </definitions>