<!--
  ~ Licensed to the Apache Software Foundation (ASF) under one
  ~ or more contributor license agreements.  See the NOTICE file
  ~ distributed with this work for additional information
  ~ regarding copyright ownership.  The ASF licenses this file
  ~ to you under the Apache License, Version 2.0 (the
  ~ "License"); you may not use this file except in compliance
  ~ with the License.  You may obtain a copy of the License at
  ~
  ~    http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing,
  ~ software distributed under the License is distributed on an
  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  ~ KIND, either express or implied.  See the License for the
  ~ specific language governing permissions and limitations
  ~ under the License.
  -->
<process name="HelloWorld"
    targetNamespace="http://www.jboss.org/bpel/examples" 
    xmlns="http://docs.oasis-open.org/wsbpel/2.0/process/executable"
    xmlns:tns="http://www.jboss.org/bpel/examples"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:intf="http://www.jboss.org/bpel/examples/wsdl"
    queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath2.0"
    expressionLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath2.0">

  <import location="HelloWorld.wsdl"
     namespace="http://www.jboss.org/bpel/examples/wsdl"
     importType="http://schemas.xmlsoap.org/wsdl/" />

   <partnerLinks>
      <partnerLink name="helloPartnerLink" 
         partnerLinkType="intf:HelloPartnerLinkType" 
         myRole="me" />
   </partnerLinks>
    
   <variables>
     <variable name="myVar" messageType="intf:HelloMessage"/>
     <variable name="mesgVar" type="xsd:string"/>
   </variables>

   <sequence>
       <receive
          name="start"
          partnerLink="helloPartnerLink"
          portType="intf:HelloPortType"
          operation="hello"
          variable="myVar"
          createInstance="yes"/>

      <assign name="assignHelloMesg">
          <copy>
              <from variable="myVar" part="TestPart"/>
              <to variable="mesgVar"/>
          </copy>
          <copy>
              <from>concat($mesgVar,' World')</from>
              <to variable="myVar" part="TestPart"/>
          </copy>
      </assign>
       <reply name="end"  
              partnerLink="helloPartnerLink"
              portType="intf:HelloPortType" 
              operation="hello"
              variable="myVar"/>
   </sequence>
</process>
