<!--
  ~ 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.13.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.*"/>
    <include pattern="org.apache.ranger.**"/>
  </api-classes>
</enunciate>
