<!--
  ~ 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.
  -->

<module name="addressing">
    <Description>This is the WS-Addressing implementation on Axis2, supporting the WS-Addressing 1.0 Recommendation, as well as the Submission version (2004/08).</Description>
    <InFlow>
        <handler name="AddressingInHandler" class="org.apache.axis2.handlers.addressing.AddressingInHandler">
            <order phase="Addressing" before="AddressingBasedDispatcher"/>
        </handler>
        <handler name="AddressingValidationHandler" class="org.apache.axis2.handlers.addressing.AddressingValidationHandler">
            <order phase="Dispatch" after="SOAPMessageBodyBasedDispatcher"/>
        </handler>
    </InFlow>

    <OutFlow>
        <!-- We don't need to have two handlers to handle these two version. So lets handle both of them in one. -->
        <handler name="AddressingOutHandler" class="org.apache.axis2.handlers.addressing.AddressingOutHandler">
            <order phase="MessageOut"/>
        </handler>
    </OutFlow>

    <OutFaultFlow>
        <handler name="AddressingOutHandler" class="org.apache.axis2.handlers.addressing.AddressingOutHandler">
            <order phase="MessageOut"/>
        </handler>
    </OutFaultFlow>

    <InFaultFlow>
        <handler name="AddressingInHandler" class="org.apache.axis2.handlers.addressing.AddressingInHandler">
            <order phase="Addressing" before="AddressingBasedDispatcher"/>
        </handler>
        <handler name="AddressingInFaultHandler" class="org.apache.axis2.handlers.addressing.AddressingInFaultHandler">
            <order phase="Addressing" after="AddressingBasedDispatcher"/>
        </handler>
        <!-- AddressingValidationHandler not present on the INfaultflow so that we don't get faults bouncing around forever -->
    </InFaultFlow>
</module>
