<!--
  ~ 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.
  -->

<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:wsa="http://www.w3.org/2005/08/addressing">
    <soapenv:Header xmlns:fabrikam="http://example.com/fabrikam" xmlns:axis2="http://ws.apache.org/namespaces/axis2">
        <wsa:MessageID>invalid-notinrole</wsa:MessageID>
        <wsa:To>soapenv:mustUnderstand="0">invalid-notinrole</wsa:To>
        <wsa:From>
            <wsa:Address>invalid-notinrole</wsa:Address>
        </wsa:From>
        <wsa:Action>invalid-notinrole</wsa:Action>
        <wsa:ReplyTo>
            <wsa:Address>invalid-notinrole</wsa:Address>
        </wsa:ReplyTo>
        <wsa:FaultTo>
            <wsa:Address>invalid-notinrole</wsa:Address>
        </wsa:FaultTo>
        <wsa:RelatesTo>invalid-notinrole</wsa:RelatesTo>
        <wsa:RelatesTo RelationshipType="http://some.custom.relationship">invalid-notinrole</wsa:RelatesTo>
        
        <wsa:MessageID axis2:AttrExt="123456789" soapenv:role="http://my/custom/role">
            uuid:920C5190-0B8F-11D9-8CED-F22EDEEBF7E5</wsa:MessageID>
        <wsa:To axis2:AttrExt="123456789" soapenv:role="http://my/custom/role">http://localhost:8081/axis/services/BankPort</wsa:To>
        <wsa:From soapenv:mustUnderstand="0" axis2:AttrExt="123456789" soapenv:role="http://my/custom/role">
            <wsa:Address>http://www.w3.org/2005/08/addressing/anonymous</wsa:Address>
            <wsa:ReferenceParameters>
                <fabrikam:CustomerKey>123456789</fabrikam:CustomerKey>
                <fabrikam:ShoppingCart>ABCDEFG</fabrikam:ShoppingCart>
            </wsa:ReferenceParameters>
            <wsa:Metadata>
                <axis2:MetaExt axis2:AttrExt="123456789">123456789</axis2:MetaExt>
            </wsa:Metadata>
            <axis2:EPRExt axis2:AttrExt="123456789">123456789</axis2:EPRExt>
        </wsa:From>
        <wsa:Action axis2:AttrExt="123456789" soapenv:role="http://my/custom/role">http://ws.apache.org/tests/action</wsa:Action>
        <wsa:ReplyTo axis2:AttrExt="123456789" soapenv:role="http://my/custom/role">
            <wsa:Address>http://example.com/fabrikam/acct</wsa:Address>
            <wsa:ReferenceParameters>
                <fabrikam:CustomerKey>123456789</fabrikam:CustomerKey>
                <fabrikam:ShoppingCart>ABCDEFG</fabrikam:ShoppingCart>
            </wsa:ReferenceParameters>
            <wsa:Metadata>
                <axis2:MetaExt axis2:AttrExt="123456789">123456789</axis2:MetaExt>
            </wsa:Metadata>
            <axis2:EPRExt axis2:AttrExt="123456789">123456789</axis2:EPRExt>
        </wsa:ReplyTo>
        <wsa:FaultTo axis2:AttrExt="123456789" soapenv:role="http://my/custom/role">
            <wsa:Address>http://example.com/fabrikam/fault</wsa:Address>
            <wsa:ReferenceParameters>
                <fabrikam:CustomerKey>123456789</fabrikam:CustomerKey>
                <fabrikam:ShoppingCart>ABCDEFG</fabrikam:ShoppingCart>
            </wsa:ReferenceParameters>
            <wsa:Metadata>
                <axis2:MetaExt axis2:AttrExt="123456789">123456789</axis2:MetaExt>
            </wsa:Metadata>
            <axis2:EPRExt axis2:AttrExt="123456789">123456789</axis2:EPRExt>
        </wsa:FaultTo>
        <wsa:RelatesTo axis2:AttrExt="123456789" soapenv:role="http://my/custom/role">http://some.previous.message</wsa:RelatesTo>
        <wsa:RelatesTo RelationshipType="http://some.custom.relationship" soapenv:role="http://my/custom/role">http://identifier.of.other.message/</wsa:RelatesTo>
    </soapenv:Header>
    <soapenv:Body>
        <ns1:getBalance soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
                xmlns:ns1="http://localhost:8081/axis/services/BankPort">
            <accountNo href="#id0"/>
        </ns1:getBalance>
        <multiRef id="id0" soapenc:root="0"
                soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
                xsi:type="xsd:int" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
            1001</multiRef>
    </soapenv:Body>
</soapenv:Envelope>