<?xml version="1.0" encoding="ISO-8859-1"?>

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

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
    <display-name>CloudBridge</display-name>
    
    <context-param>    
        <param-name>contextConfigLocation</param-name>    
        <param-value>classpath:applicationContext.xml</param-value>    
    </context-param>
    
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <servlet>
        <servlet-name>EC2MainServlet</servlet-name>
        <display-name>EC2 Main Servlet</display-name>
        <servlet-class>com.cloud.bridge.service.EC2MainServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet>
        <servlet-name>AxisServlet</servlet-name>
        <display-name>Apache-Axis Servlet</display-name>
        <servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class>
        <!--<init-param>-->
        <!--<param-name>axis2.xml.path</param-name>-->
        <!--<param-value>/WEB-INF/conf/axis2.xml</param-value>-->
        <!--<param-name>axis2.xml.url</param-name>-->
        <!--<param-value>http://localhost/myrepo/axis2.xml</param-value>-->
        <!--<param-name>axis2.repository.path</param-name>-->
        <!--<param-value>/WEB-INF</param-value>-->
        <!--<param-name>axis2.repository.url</param-name>-->
        <!--<param-value>http://localhost/myrepo</param-value>-->
        <!--</init-param>-->
        <load-on-startup>2</load-on-startup>
    </servlet>
    <servlet>
        <servlet-name>AxisAdminServlet</servlet-name>
        <display-name>Apache-Axis AxisAdmin Servlet (Web Admin)</display-name>
        <servlet-class>
            org.apache.axis2.webapp.AxisAdminServlet</servlet-class>
    </servlet>
    <servlet>
        <servlet-name>CloudBridgeS3Servlet</servlet-name>
        <display-name>Cloud.com Bridge S3 Service REST Servlet</display-name>
        <servlet-class>com.cloud.bridge.service.S3RestServlet</servlet-class>
        <init-param>
            <param-name>readonly</param-name>
            <param-value>false</param-value>
        </init-param>
    </servlet>
    <servlet>
        <servlet-name>EC2RestServlet</servlet-name>
        <display-name>Cloud.com Bridge EC2 Service REST Servlet</display-name>
        <servlet-class>com.cloud.bridge.service.EC2RestServlet</servlet-class>
		<load-on-startup>3</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>CloudBridgeS3Servlet</servlet-name>
        <url-pattern>/rest/AmazonS3</url-pattern>
    </servlet-mapping>

   <servlet-mapping>
        <servlet-name>CloudBridgeS3Servlet</servlet-name>
        <url-pattern>/rest/AmazonS3/*</url-pattern>
    </servlet-mapping>
    
    <servlet-mapping>
        <servlet-name>CloudBridgeS3Servlet</servlet-name>
        <url-pattern>/dime/AmazonS3</url-pattern>
    </servlet-mapping>
   
    <!-- EC2 examples are using that last '/' --> 
    <servlet-mapping>
        <servlet-name>EC2RestServlet</servlet-name>
        <url-pattern>/rest/AmazonEC2/*</url-pattern>
    </servlet-mapping>
    
    <!-- handle the common error of leaving off the last '/' -->
    <servlet-mapping>
        <servlet-name>EC2RestServlet</servlet-name>
        <url-pattern>/rest/AmazonEC2</url-pattern>
    </servlet-mapping>
    
    <servlet-mapping>
        <servlet-name>AxisServlet</servlet-name>
        <url-pattern>/servlet/AxisServlet</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>AxisServlet</servlet-name>
        <url-pattern>*.jws</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>AxisServlet</servlet-name>
        <url-pattern>/services/*</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>AxisAdminServlet</servlet-name>
        <url-pattern>/axis2-admin/*</url-pattern>
    </servlet-mapping>

     <servlet-mapping>
        <servlet-name>EC2MainServlet</servlet-name>
        <url-pattern>/</url-pattern>
     </servlet-mapping>
     <servlet-mapping>
        <servlet-name>EC2MainServlet</servlet-name>
        <url-pattern>/*</url-pattern>
     </servlet-mapping>

    <mime-mapping>
        <extension>inc</extension>
        <mime-type>text/plain</mime-type>
    </mime-mapping>

   <welcome-file-list>
      <welcome-file>index.jsp</welcome-file>
      <welcome-file>index.html</welcome-file>
      <welcome-file>/axis2-web/index.jsp</welcome-file>
    </welcome-file-list>

    <error-page>
      <error-code>404</error-code>
      <location>/axis2-web/Error/error404.jsp</location>
    </error-page>

    <error-page>
        <error-code>500</error-code>
        <location>/axis2-web/Error/error500.jsp</location>
    </error-page>
</web-app>
