<!--
  ~ 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">
    <soapenv:Header></soapenv:Header>
    <soapenv:Body>
        <soapenv:Fault>
            <soapenv:Node></soapenv:Node>
            <soapenv:Role></soapenv:Role>
            <soapenv:Detail>
                <soapenv:Exception>org.apache.axis2.AxisFault: Intentional Failure from SOAP 1.2 testing ...; nested exception is:org.apache.axis2.AxisFault: Intentional Failure from SOAP 1.2 testing ...at org.apache.axis2.engine.AxisEngine.handleFault(AxisEngine.java:186)at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:127)at org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRequest(HTTPTransportUtils.java:102)at org.apache.axis2.transport.http.HTTPWorker.doWork(HTTPWorker.java:110)at org.apache.axis2.util.threadpool.ThreadWorker.run(ThreadWorker.java:34)Caused by: org.apache.axis2.AxisFault: Intentional Failure from SOAP 1.2 testing ...at org.apache.axis2.soap12testing.handlers.SOAP12InFlowHandlerDefaultC.invoke(SOAP12InFlowHandlerDefaultC.java:120)at org.apache.axis2.engine.Phase.invoke(Phase.java:161)at org.apache.axis2.engine.AxisEngine.invokePhases(AxisEngine.java:252)at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:118)... 3 more</soapenv:Exception>
            </soapenv:Detail>
            <soapenv:Code>
                <soapenv:Value>env:MustUnderstand</soapenv:Value>
            </soapenv:Code>
            <soapenv:Reason>
                <soapenv:Text xml:lang="en-US">Header not understood</soapenv:Text>
            </soapenv:Reason>
        </soapenv:Fault>
    </soapenv:Body>
</soapenv:Envelope>