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

<service provider="xsd:anyprovider" style="xsd:anyURI" contextPath="xsd:anycontextPath">
    <!-- these are Service Parameters -->
    <parameter name="para1" locked="xsd:true">10</parameter>
    <parameter name="para2">Colombo</parameter>

    <module ref="module1"></module>
    <module ref="module2"></module>


    <!--  Service TypeMapping -->
    <typeMapping>
        <typeMapper xsiType="int" javaType="java.lang.Integer" class="org.apache.axis2.rpc.TypeMapperImpl"/>
    </typeMapping>
    <beanMapping>bean mappping should come here</beanMapping>

    <!--
    Phases
    P1 p2 p3
    -->

    <InFlow>
        <handler name="h1" class="org.apache.axis2.engine.registry.SpeakingHandler">
            <order phase="p1" phaseFirst="true"/>
            <parameter name="para8" locked="xsd:true">123</parameter>
            <parameter name="para9" locked="xsd:true">456</parameter>
            <parameter name="para10" locked="xsd:true">789</parameter>
        </handler>
        <handler name="h2" class="org.apache.axis2.engine.registry.SpeakingHandler"/>
    </InFlow>

    <OutFlow>
        <handler name="h3" class="org.apache.axis2.engine.registry.SpeakingHandler">
            <order phase="p2"/>
            <parameter name="para8" locked="xsd:true">123</parameter>
            <parameter name="para9" locked="xsd:true">456</parameter>
        </handler>
    </OutFlow>

    <FaultFlow>
        <handler name="h4" class="org.apache.axis2.engine.registry.SpeakingHandler">
            <parameter name="para8" locked="xsd:true">123</parameter>
            <parameter name="para9" locked="xsd:true">456</parameter>
            <parameter name="para10" locked="xsd:true">789</parameter>
        </handler>

        <handler name="h5" class="org.apache.axis2.engine.registry.SpeakingHandler">
            <order phase="p1"/>
        </handler>

        <handler name="h6" class="org.apache.axis2.engine.registry.SpeakingHandler">
            <order phase="anyhase" phaseFirst="true" phaseLast="false"/>
            <parameter name="para8" locked="xsd:true">123</parameter>
            <parameter name="para9" locked="xsd:true">456</parameter>
            <parameter name="para10" locked="xsd:true">789</parameter>
        </handler>
    </FaultFlow>


    <operation name="opname" qname="opqname" style="anyStyle" use="anyUse">
        <module ref="uri">
            <parameter name="para3" locked="xsd:true">10</parameter>
            <parameter name="para4">LSF</parameter>
        </module>

        <InFlow>
            <handler name="h7" class="org.apache.axis2.engine.registry.SpeakingHandler"/>
        </InFlow>
        <OutFlow>
            <handler name="h8" class="org.apache.axis2.engine.registry.SpeakingHandler">
                <order phase="anyhase"/>
                <parameter name="para8" locked="xsd:true">123</parameter>
                <parameter name="para9" locked="xsd:true">456</parameter>
                <parameter name="para10" locked="xsd:true">789</parameter>
            </handler>
        </OutFlow>
        <FaultFlow>
        </FaultFlow>
    </operation>
</service>