<!--
  ~ 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.
  -->
<deploy xmlns="http://www.apache.org/ode/schemas/dd/2007/03"
	xmlns:pns="http://ode/bpel/unit-test" 
	xmlns:wns="http://ode/bpel/unit-test.wsdl" xmlns:dns="http://axis2.ode.apache.org">


	<process name="pns:HeaderTest">
		<active>true</active>
		<provide partnerLink="helloPartnerLink">
			<service name="wns:HeaderTestService" port="HeaderTestPort"/>
		</provide>
        <invoke partnerLink="dummyPartnerLink">
            <service name="dns:DummyService" port="DummyServiceSOAP11port_http"/>
        </invoke>
    </process>
</deploy>
