<!--
  ~ 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.
  -->
<enunciate xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:noNamespaceSchemaLocation="http://enunciate.webcohesion.com/schemas/enunciate-2.8.0.xsd" >
	<title>Ranger REST API</title>
	<description> Apache Ranger is a framework to enable, monitor and manage comprehensive data security across the Hadoop platform. Apache Ranger currently provides a centralized security adminstration, fine grain access control and detailed auditing for user access within Apache Hadoop, Apache Hive, Apache HBase and other Apache components</description>
	<modules>
		<swagger/>
		<jackson/>
		<jackson1 disabled="true"/>
		<c-xml-client disabled="true"/>
		<java-json-client disabled="true"/>
		<csharp-xml-client disabled="true"/>
		<java-xml-client disabled="true"/>
		<javascript-client disabled="true"/>
		<ruby-json-client disabled="true"/>
		<gwt-json-overlay disabled="true"/>
		<php-xml-client disabled="true"/>
		<php-json-client disabled="true"/>
		<jaxws disabled="true"/>
	</modules>
  <api-classes>
    <include pattern="org.apache.hadoop.crypto.key.kms.server.*"/>
  </api-classes>
</enunciate>
