<!--
   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.
-->
<html>
<head>
    <title>Package Documentation for {@link org.apache.directory.fortress.rest.FortressService}</title>
</head>
<body>
<p>
    This package contains REST APIs that are used by HTTP programs to provide Identity and Access Management
    functionality.
    The javadoc for the Fortress REST services: {@link org.apache.directory.fortress.rest.FortressService}
</p>
</body>
</html>
