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

<%@ page contentType="text/html;charset=iso-8859-1" language="java" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
  <head>
    <jsp:include page="../include/httpbase.jsp"/>
    <title>Axis2 :: Internal server error</title>
    <link href="axis2-web/css/axis-style.css" rel="stylesheet" type="text/css"/>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
  </head>

  <body>
    <table width="100%">
      <tr>
        <td align="left"><img src="axis2-web/images/asf-logo.gif" alt=""/></td>
        <td align="right"><img src="axis2-web/images/axis_l.jpg" alt=""/></td>
      </tr>
    </table>
    <table width="100%">
      <tr>
        <td>
          <h1>Internal server error</h1>
          <br/>
          <br/>
          <br/>
          <br/>
        </td>
      </tr>
      <tr><td align="center"><a href="axis2-web/index.jsp">home</a></td></tr>
    </table>
    <hr/>
    <table width="100%">
      <tr><td>
        <table width="950px">
          <tr><td><hr size="1" noshade=""/></td></tr>
          <tr>
            <td align="center">Copyright &#169; 1999-2006, The Apache Software Foundation<br/>Licensed under the <a
              href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</td>
          </tr>
        </table>
      </td>
        <td>&nbsp;</td>
      </tr>
    </table>
  </body>
</html>