#
#    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.
#

namespace=http://ode/bpel/unit-test/TestSubTreeAssign.wsdl
service=TestSubTreeAssignService
operation=request
request1=<message><requestMessageData><ens:aTestMessage xmlns:ens="http://ode/bpel/unit-test/TestSubTreeAssign.wsdl.types"><requestID>Start SubTreeAssign</requestID><requestText>Event SubTreeAssign</requestText><typeIndicators xmlns:foo="http://ode/bpel/unit-test/TestSubTreeAssign.wsdl.types"><foo:indicatorOne>fail</foo:indicatorOne><foo:indicatorTwo>fail</foo:indicatorTwo></typeIndicators></ens:aTestMessage></requestMessageData></message>
response1=.*<replyID>Start SubTreeAssign</replyID><replyText>pass</replyText>.*
