<!--
  ~ 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>Atlas REST API</title>
    <description> Atlas exposes a variety of REST endpoints to work with types, entities, lineage and data discovery.</description>
    <api-classes>
        <include pattern="org.apache.atlas.web.rest.*"/>
        <include pattern="org.apache.atlas.model.*"/>
    </api-classes>

    <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>
</enunciate>