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

<axisconfig name="AxisJava2.0">
    <parameter name="para1" locked="xsd:true">10</parameter>
    <parameter name="para2">Colombo</parameter>
    <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"/>
    <module ref="module1"> </module>
    <!--
      <module ref="uri">
          <parameter name="para3" locked="xsd:true">10</parameter>
          <parameter name="para4">LSF</parameter>
      </module>
     -->
    <phaseOrder>
        <phase name="global"/>
        <phase name="transport"/>
        <phase name="module"/>
        <phase name="service"/>
    </phaseOrder>
    <gool>
        not good
    </gool>
</axisconfig>