<!--
  ~ 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="module1">
    <InFlow>
        <handler name="h1" class="org.apache.axis2.registry.Handler3">
            <order phase="OperationInPhase"/>
        </handler>
        <handler name="h2" class="org.apache.axis2.registry.Handler3">
            <order phase="OperationInPhase"/>
        </handler>
    </InFlow>

    <OutFlow>
        <handler name="h3" class="org.apache.axis2.registry.Handler3">
            <order phase="OperationOutPhase"/>
        </handler>
    </OutFlow>

    <OutFaultFlow>
        <handler name="h4" class="org.apache.axis2.registry.Handler3">
            <order phase="OperationOutFaultPhase"/>
        </handler>
    </OutFaultFlow>

    <InFaultFlow>
        <handler name="h5" class="org.apache.axis2.registry.Handler3">
            <order phase="OperationInFaultPhase"/>
        </handler>
    </InFaultFlow>

    <operation name="creatSeq" mep="http://www.w3.org/2004/08/wsdl/in-out">
        <messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
        <parameter name="para1" locked="xsd:true">10</parameter>
    </operation>
</module>