<!--
  ~ 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>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
                base="${project.parent.basedir}/build-tools/src/main/resources/ui-dist"
                basePath="/api/atlas/"
        />
        <jackson datatype-detection="aggressive" propertiesAlphabetical="true" honorJaxb="false"/>
        <jaxrs datatype-detection="aggressive"/>
        <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>
