blob: 9ac501dc81c45239eca1a6c5fba312b59b651a84 [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--
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>
<link type="text/css" rel="stylesheet" href="/resources/site.css">
<script src='/resources/space.js'></script>
<meta http-equiv="Content-type" content="text/html;charset=UTF-8">
<meta name="keywords" content="business integration, EAI, SOA, Service Oriented Architecture, web services, SOAP, JBI, JMS, WSDL, XML, EDI, Electronic Data Interchange, standards support, integration standards, application integration, middleware, software, solutions, services, CXF, open source">
<meta name="description" content="Apache CXF, Services Framework - OpenApiFeature (Microprofile)">
<title>
Apache CXF -- OpenApiFeature (Microprofile)
</title>
</head>
<body onload="init()">
<table width="100%" cellpadding="0" cellspacing="0">
<tr>
<td id="cell-0-0" colspan="2">&nbsp;</td>
<td id="cell-0-1">&nbsp;</td>
<td id="cell-0-2" colspan="2">&nbsp;</td>
</tr>
<tr>
<td id="cell-1-0">&nbsp;</td>
<td id="cell-1-1">&nbsp;</td>
<td id="cell-1-2">
<!-- Banner -->
<div class="banner" id="banner"><div><table border="0" cellpadding="0" cellspacing="0" width="100%"><tr><td align="left" colspan="1" nowrap>
<a shape="rect" href="http://cxf.apache.org/" title="Apache CXF"><span style="font-weight: bold; font-size: 170%; color: white">Apache CXF</span></a>
</td><td align="right" colspan="1" nowrap>
<a shape="rect" href="http://www.apache.org/" title="The Apache Sofware Foundation"><img border="0" alt="ASF Logo" src="http://cxf.apache.org/images/asf-logo.png"></a>
</td></tr></table></div></div>
<!-- Banner -->
<div id="top-menu">
<table border="0" cellpadding="1" cellspacing="0" width="100%">
<tr>
<td>
<div align="left">
<!-- Breadcrumbs -->
<a href="index.html">Index</a>&nbsp;&gt;&nbsp;<a href="configuration.html">Configuration</a>&nbsp;&gt;&nbsp;<a href="featureslist.html">FeaturesList</a>&nbsp;&gt;&nbsp;<a href="openapifeature-microprofile.html">OpenApiFeature (Microprofile)</a>
<!-- Breadcrumbs -->
</div>
</td>
<td>
<div align="right">
<!-- Quicklinks -->
<div id="quicklinks"><p><a shape="rect" href="http://cxf.apache.org/download.html">Download</a> | <a shape="rect" href="http://cxf.apache.org/docs/index.html">Documentation</a></p></div>
<!-- Quicklinks -->
</div>
</td>
</tr>
</table>
</div>
</td>
<td id="cell-1-3">&nbsp;</td>
<td id="cell-1-4">&nbsp;</td>
</tr>
<tr>
<td id="cell-2-0" colspan="2">&nbsp;</td>
<td id="cell-2-1">
<table>
<tr valign="top">
<td height="100%">
<div id="wrapper-menu-page-right">
<div id="wrapper-menu-page-top">
<div id="wrapper-menu-page-bottom">
<div id="menu-page">
<!-- NavigationBar -->
<div id="navigation"><ul class="alternate"><li><a shape="rect" href="overview.html">Overview</a></li><li><a shape="rect" href="how-tos.html">How-Tos</a></li><li><a shape="rect" href="frontends.html">Frontends</a></li><li><a shape="rect" href="databindings.html">DataBindings</a></li><li><a shape="rect" href="transports.html">Transports</a></li><li><a shape="rect" href="configuration.html">Configuration</a></li><li><a shape="rect" href="debugging-and-logging.html">Debugging and Logging</a></li><li><a shape="rect" href="tools.html">Tools</a></li><li><a shape="rect" href="restful-services.html">RESTful Services</a></li><li><a shape="rect" href="wsdl-bindings.html">WSDL Bindings</a></li><li><a shape="rect" href="service-routing.html">Service Routing</a></li><li><a shape="rect" href="dynamic-languages.html">Dynamic Languages</a></li><li><a shape="rect" href="ws-support.html">WS-* Support</a></li><li><a shape="rect" href="advanced-integration.html">Advanced Integration</a></li><li><a shape="rect" href="deployment.html">Deployment</a></li><li><a shape="rect" href="schemas-and-namespaces.html">Use of Schemas and Namespaces</a></li></ul><hr><ul class="alternate"><li><p>Search</p></li></ul><form enctype="application/x-www-form-urlencoded" method="get" id="cse-search-box" action="http://www.google.com/cse">
<div>
<input type="hidden" name="cx" value="002890367768291051730:o99qiwa09y4">
<input type="hidden" name="ie" value="UTF-8">
<input type="text" name="q" size="21">
<input type="submit" name="sa" value="Search">
</div>
</form>
<script type="text/javascript" src="http://www.google.com/cse/brand?form=cse-search-box&amp;lang=en"></script><hr><ul class="alternate"><li><a shape="rect" href="http://cxf.apache.org/javadoc/latest/">API 3.2.x (Javadoc)</a></li><li><a shape="rect" href="http://cxf.apache.org/javadoc/latest-3.1.x/">API 3.1.x (Javadoc)</a></li><li><a shape="rect" href="http://cxf.apache.org/">CXF Website</a></li></ul><p>&#160;</p><p><a shape="rect" class="external-link" href="http://www.apache.org/events/current-event.html"><span class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image confluence-external-resource" src="http://www.apache.org/events/current-event-125x125.png" data-image-src="http://www.apache.org/events/current-event-125x125.png"></span></a></p></div>
<!-- NavigationBar -->
</div>
</div>
</div>
</div>
</td>
<td height="100%">
<!-- Content -->
<div class="wiki-content">
<div id="ConfluenceContent"><h1 id="OpenApiFeature(Microprofile)-/*&lt;![CDATA[*/div.rbtoc1636141550334{padding:0px;}div.rbtoc1636141550334ul{list-style:disc;margin-left:0px;}div.rbtoc1636141550334li{margin-left:0px;padding-left:0px;}/*]]&gt;*/#OpenApiFeature(Microprofile)-Introduction#OpenApiFea"><style type="text/css">/*<![CDATA[*/
div.rbtoc1636141550334 {padding: 0px;}
div.rbtoc1636141550334 ul {list-style: disc;margin-left: 0px;}
div.rbtoc1636141550334 li {margin-left: 0px;padding-left: 0px;}
/*]]>*/</style></h1><div class="toc-macro rbtoc1636141550334">
<ul class="toc-indentation"><li><a shape="rect" href="#OpenApiFeature(Microprofile)-"></a></li><li><a shape="rect" href="#OpenApiFeature(Microprofile)-Introduction">Introduction</a></li><li><a shape="rect" href="#OpenApiFeature(Microprofile)-Setup">Setup</a></li><li><a shape="rect" href="#OpenApiFeature(Microprofile)-Properties">Properties</a></li><li><a shape="rect" href="#OpenApiFeature(Microprofile)-ConfiguringfromCode">Configuring from Code</a></li><li><a shape="rect" href="#OpenApiFeature(Microprofile)-ConfiguringfromSpring">Configuring from Spring</a></li><li><a shape="rect" href="#OpenApiFeature(Microprofile)-ConfiguringfromPropertyfiles">Configuring from Property files</a></li><li><a shape="rect" href="#OpenApiFeature(Microprofile)-EnablingSwaggerUI">Enabling Swagger UI</a>
<ul class="toc-indentation"><li><a shape="rect" href="#OpenApiFeature(Microprofile)-ConfiguringSwaggerUI">Configuring Swagger UI</a></li></ul>
</li><li><a shape="rect" href="#OpenApiFeature(Microprofile)-Samples">Samples</a></li></ul>
</div><h1 id="OpenApiFeature(Microprofile)-Introduction">Introduction</h1><p>The CXF <strong>OpenApiFeature</strong> allows you to generate <a shape="rect" class="external-link" rel="nofollow" href="https://github.com/OAI/OpenAPI-Specification/releases/tag/3.0.0">OpenAPI v3.0</a> documents from JAX-RS service endpoints with a simple configuration. This feature can be configured programmatically in Java or using Spring or Blueprint beans and is an alternative to Swagger's <a shape="rect" href="openapifeature.html">OpenApiFeature</a>.</p><h1 id="OpenApiFeature(Microprofile)-Setup">Setup</h1><div class="table-wrap"><table class="wrapped confluenceTable"><colgroup span="1"><col span="1"></colgroup><tbody><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code class="java plain">&lt;dependency&gt;</code><br clear="none"><code class="java spaces">&#160;&#160;&#160;&#160;</code><code class="java plain">&lt;groupId&gt;org.apache.cxf&lt;/groupId&gt;</code><br clear="none"><code class="java spaces">&#160;&#160;&#160;&#160;</code><code class="java plain">&lt;artifactId&gt;cxf-rt-rs-service-description-microprofile-openapi&lt;/artifactId&gt;</code><br clear="none"><code class="java spaces">&#160;&#160;&#160;&#160;</code><code class="java plain">&lt;version&gt;</code><code class="java value">3.4</code><code class="java plain">.</code><code class="java value">0</code><code class="java plain">&lt;/version&gt;</code><br clear="none"><code class="java plain">&lt;/dependency&gt;</code></p></td></tr></tbody></table></div><p>The&#160;<strong>cxf-rt-rs-service-description-microprofile-openapi</strong> is only available in <strong>3.4.0</strong>. For older releases, please consider&#160;Swagger's <a shape="rect" href="openapifeature.html">OpenApiFeature</a> instead.</p><h1 id="OpenApiFeature(Microprofile)-Properties">Properties</h1><p><span>The following optional parameters can be configured in <strong>OpenApiFeature </strong>(please note there are some differences comparing to Swagger's <a shape="rect" href="openapifeature.html">OpenApiFeature</a>).</span></p><div class="table-wrap"><table class="wrapped confluenceTable"><colgroup span="1"><col span="1"><col span="1"><col span="1"><col span="1"></colgroup><tbody><tr><td colspan="1" rowspan="1" class="confluenceTd">configLocation</td><td colspan="1" rowspan="1" class="confluenceTd"><p>the OpenAPI configuration location</p></td><td colspan="1" rowspan="1" class="confluenceTd">null</td><td colspan="1" rowspan="1" class="confluenceTd">/config/openapi-configuration.yml</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">scanKnownConfigLocations</td><td colspan="1" rowspan="1" class="confluenceTd"><p>scan known OpenAPI configuration location (classpath or filesystem), which are:</p><pre>openapi-configuration.yaml
openapi-configuration.json
openapi.yaml
openapi.json</pre></td><td colspan="1" rowspan="1" class="confluenceTd">true</td><td colspan="1" rowspan="1" class="confluenceTd">true</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">propertiesLocation</td><td colspan="1" rowspan="1" class="confluenceTd">the properties file location</td><td colspan="1" rowspan="1" class="confluenceTd">/swagger.properties</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;/swagger.properties</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">swaggerUiMavenGroupAndArtifact</td><td colspan="1" rowspan="1" class="confluenceTd">the Maven artifacts to pinpoint SwaggerUI</td><td colspan="1" rowspan="1" class="confluenceTd">null</td><td colspan="1" rowspan="1" class="confluenceTd">"org.webjars.swagger-ui'</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">swaggerUiVersion</td><td colspan="1" rowspan="1" class="confluenceTd">the version of SwaggerUI</td><td colspan="1" rowspan="1" class="confluenceTd">null</td><td colspan="1" rowspan="1" class="confluenceTd">"3.13.0"</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">supportSwaggerUi</td><td colspan="1" rowspan="1" class="confluenceTd">turns on/off SwaggerUI support</td><td colspan="1" rowspan="1" class="confluenceTd"><strong>null (== true)</strong></td><td colspan="1" rowspan="1" class="confluenceTd">true</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">filterClass</td><td colspan="1" rowspan="1" class="confluenceTd">a security filter<strong>*</strong><strong>*</strong></td><td colspan="1" rowspan="1" class="confluenceTd">null</td><td colspan="1" rowspan="1" class="confluenceTd">"com.example.filter.SampleFilter"</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">resourceClasses</td><td colspan="1" rowspan="1" class="confluenceTd">a list of resource classes which must be scanned<strong>*</strong><strong>*</strong></td><td colspan="1" rowspan="1" class="confluenceTd">null</td><td colspan="1" rowspan="1" class="confluenceTd">["com.example.rest.SampleResource"]</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">resourcePackages</td><td colspan="1" rowspan="1" class="confluenceTd">a list of package names where resources must be scanned<strong>*</strong><strong>*</strong></td><td colspan="1" rowspan="1" class="confluenceTd">null</td><td colspan="1" rowspan="1" class="confluenceTd">["com.example.rest"]</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">ignoredRoutes</td><td colspan="1" rowspan="1" class="confluenceTd">excludes specific paths when scanning all resources (see scanAllResources)<span><strong>*</strong><strong>*</strong></span></td><td colspan="1" rowspan="1" class="confluenceTd">null</td><td colspan="1" rowspan="1" class="confluenceTd">["/api/test"]</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">prettyPrint</td><td colspan="1" rowspan="1" class="confluenceTd">when generating openapi.json, pretty-print the JSON document<span><strong>*</strong><strong>*</strong></span></td><td colspan="1" rowspan="1" class="confluenceTd"><strong>true</strong></td><td colspan="1" rowspan="1" class="confluenceTd">true</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">runAsFilter</td><td colspan="1" rowspan="1" class="confluenceTd">runs the feature as a filter</td><td colspan="1" rowspan="1" class="confluenceTd"><strong>false</strong></td><td colspan="1" rowspan="1" class="confluenceTd">false</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">scan</td><td colspan="1" rowspan="1" class="confluenceTd">Scan all JAX-RS resources automatically</td><td colspan="1" rowspan="1" class="confluenceTd"><strong>true</strong></td><td colspan="1" rowspan="1" class="confluenceTd">true</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">readAllResources</td><td colspan="1" rowspan="1" class="confluenceTd"><span>Read all operations also with no @Operation<strong>*</strong><strong>*</strong></span><span>&#160;</span></td><td colspan="1" rowspan="1" class="confluenceTd"><strong>true</strong></td><td colspan="1" rowspan="1" class="confluenceTd">true</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">termsOfServiceUrl</td><td colspan="1" rowspan="1" class="confluenceTd">the terms of service URL<span><strong>*</strong></span></td><td colspan="1" rowspan="1" class="confluenceTd">null</td><td colspan="1" rowspan="1" class="confluenceTd">null</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">licenseUrl</td><td colspan="1" rowspan="1" class="confluenceTd">the license URL<strong>*</strong></td><td colspan="1" rowspan="1" class="confluenceTd">null</td><td colspan="1" rowspan="1" class="confluenceTd">"<span class="nolink"><a shape="rect" class="external-link" href="http://www.apache.org/licenses/LICENSE-2.0.html">http://www.apache.org/licenses/LICENSE-2.0.html</a></span>"</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">license</td><td colspan="1" rowspan="1" class="confluenceTd">the license<span><strong>*</strong></span></td><td colspan="1" rowspan="1" class="confluenceTd">null</td><td colspan="1" rowspan="1" class="confluenceTd">"Apache 2.0 License"</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">contactUrl</td><td colspan="1" rowspan="1" class="confluenceTd">the contact link<strong>*</strong></td><td colspan="1" rowspan="1" class="confluenceTd">null</td><td colspan="1" rowspan="1" class="confluenceTd">null</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">contactEmail</td><td colspan="1" rowspan="1" class="confluenceTd">the contact email<strong>*</strong></td><td colspan="1" rowspan="1" class="confluenceTd">null</td><td colspan="1" rowspan="1" class="confluenceTd">"users@<a shape="rect" href="http://cxf.apache.org">cxf.apache.org</a>"</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">contactName</td><td colspan="1" rowspan="1" class="confluenceTd">the contact name<strong>*</strong></td><td colspan="1" rowspan="1" class="confluenceTd">null</td><td colspan="1" rowspan="1" class="confluenceTd">null</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">description</td><td colspan="1" rowspan="1" class="confluenceTd">the description<span><strong>*</strong></span></td><td colspan="1" rowspan="1" class="confluenceTd">null</td><td colspan="1" rowspan="1" class="confluenceTd">"The Sample REST Application with OpenAPI integration"</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">title</td><td colspan="1" rowspan="1" class="confluenceTd">the title<span><strong>*</strong></span></td><td colspan="1" rowspan="1" class="confluenceTd">null</td><td colspan="1" rowspan="1" class="confluenceTd">"Sample REST Application"</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">version</td><td colspan="1" rowspan="1" class="confluenceTd">the version<span><strong>*</strong></span></td><td colspan="1" rowspan="1" class="confluenceTd">null</td><td colspan="1" rowspan="1" class="confluenceTd">"1.0.0"</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><span class="blob-code-inner blob-code-marker-addition">swaggerUiConfig</span></td><td colspan="1" rowspan="1" class="confluenceTd">Swagger UI configuration</td><td colspan="1" rowspan="1" class="confluenceTd">null</td><td colspan="1" rowspan="1" class="confluenceTd">new <span class="blob-code-inner blob-code-marker-addition"><span class="pl-smi">SwaggerUiConfig</span>().url("/openapi.json")</span></td></tr></tbody></table></div><p><span><strong>*</strong> - the properties are defined in the OpenAPI class</span></p><p><span>&#160;<strong>*</strong><strong>*</strong> - the properties are defined in the&#160;SwaggerConfiguration class</span></p><h1 id="OpenApiFeature(Microprofile)-ConfiguringfromCode">Configuring from Code</h1><div class="table-wrap"><table class="wrapped confluenceTable"><colgroup span="1"><col span="1"></colgroup><tbody><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code class="java plain">import org.apache.cxf.jaxrs.microprofile.openapi.OpenApiFeature;</code><br clear="none">&#160;<br clear="none"><code class="java plain">...</code><br clear="none">&#160;<br clear="none"><code class="java keyword">final</code> <code class="java plain">OpenApiFeature feature = </code><code class="java keyword">new</code> <code class="java plain">OpenApiFeature();</code><br clear="none"><code class="java plain">feature.setContactEmail(</code><code class="java string">"cxf@<a shape="rect" class="external-link" href="http://apache.org">apache.org</a>"</code><code class="java plain">);</code><br clear="none"><code class="java plain">feature.setLicense(</code><code class="java string">"Apache 2.0 License"</code><code class="java plain">);</code><br clear="none"><code class="java plain">feature.setLicenseUrl(</code><code class="java string">"<a shape="rect" class="external-link" href="http://www.apache.org/licenses/LICENSE-2.0.html">http://www.apache.org/licenses/LICENSE-2.0.html</a>"</code><code class="java plain">);&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </code></p></td></tr></tbody></table></div><h1 id="OpenApiFeature(Microprofile)-ConfiguringfromSpring">Configuring from Spring</h1><div class="table-wrap"><table class="wrapped confluenceTable"><colgroup span="1"><col span="1"></colgroup><tbody><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code class="java plain">&lt;beans xmlns=</code><code class="java string">"<a shape="rect" class="external-link" href="http://www.springframework.org/schema/beans" rel="nofollow">http://www.springframework.org/schema/beans</a>"</code><br clear="none"><code class="java spaces">&#160;&#160;&#160;&#160;&#160;&#160;&#160;</code><code class="java plain">xmlns:xsi=</code><code class="java string">"<a shape="rect" class="external-link" href="http://www.w3.org/2001/XMLSchema-instance" rel="nofollow">http://www.w3.org/2001/XMLSchema-instance</a>"</code> <code class="java plain">xmlns:cxf=</code><code class="java string">"<a shape="rect" href="http://cxf.apache.org/core">http://cxf.apache.org/core</a>"</code><br clear="none"><code class="java spaces">&#160;&#160;&#160;&#160;&#160;&#160;&#160;</code><code class="java plain">xmlns:jaxrs=</code><code class="java string">"<a shape="rect" href="http://cxf.apache.org/jaxrs">http://cxf.apache.org/jaxrs</a>"</code><br clear="none"><code class="java spaces">&#160;&#160;&#160;&#160;&#160;&#160;&#160;</code><code class="java plain">xsi:schemaLocation="http:</code><code class="java comments">//<a shape="rect" href="http://cxf.apache.org/core">cxf.apache.org/core</a> <a shape="rect" href="http://cxf.apache.org/schemas/core.xsd">http://cxf.apache.org/schemas/core.xsd</a></code><br clear="none"><code class="java spaces">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</code><code class="java plain">http:</code><code class="java comments">//<a shape="rect" href="http://cxf.apache.org/jaxrs">cxf.apache.org/jaxrs</a> <a shape="rect" href="http://cxf.apache.org/schemas/jaxrs.xsd">http://cxf.apache.org/schemas/jaxrs.xsd</a></code><br clear="none"><code class="java spaces">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</code><code class="java plain">http:</code><code class="java comments">//<a shape="rect" class="external-link" href="http://www.springframework.org/schema/beans" rel="nofollow">www.springframework.org/schema/beans</a> <a shape="rect" class="external-link" href="http://www.springframework.org/schema/beans/spring-beans.xsd" rel="nofollow">http://www.springframework.org/schema/beans/spring-beans.xsd</a>"&gt;</code><br clear="none"><code class="java spaces">&#160;&#160;&#160;&#160;</code><code class="java plain">... </code><br clear="none"><code class="java spaces">&#160;&#160;&#160;&#160;</code><code class="java plain">&lt;!-- JAXRS providers --&gt;</code><br clear="none"><code class="java spaces">&#160;&#160;&#160;&#160;</code><code class="java plain">&lt;bean id=</code><code class="java string">"jsonProvider"</code> <code class="java keyword">class</code><code class="java plain">=</code><code class="java string">"com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider"</code> <code class="java plain">/&gt;</code><br clear="none"><code class="java spaces">&#160;</code>&#160;<br clear="none"><code class="java spaces">&#160;&#160;&#160;&#160;</code><code class="java plain">&lt;!-- Application resources --&gt;</code><br clear="none"><code class="java spaces">&#160;&#160;&#160;&#160;</code><code class="java plain">&lt;bean id=</code><code class="java string">"sampleResource"</code> <code class="java keyword">class</code><code class="java plain">=</code><code class="java string">"demo.jaxrs.openapi.server.Sample"</code> <code class="java plain">/&gt;</code><br clear="none"><code class="java spaces">&#160;</code>&#160;<br clear="none"><code class="java spaces">&#160;&#160;&#160;&#160;</code><code class="java plain">&lt;!-- CXF OpenApiFeature (Microprofile) --&gt;&#160; </code><br clear="none"><code class="java spaces">&#160;&#160;&#160;&#160;</code><code class="java plain">&lt;bean id=</code><code class="java string">"openApiFeature"</code> <code class="java keyword">class</code><code class="java plain">=</code><code class="java string">"<code class="java plain">org.apache.cxf.jaxrs.microprofile.openapi.OpenApiFeatu</code>re"</code><code class="java plain">&gt;</code><br clear="none"><code class="java spaces">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</code><code class="java plain">&lt;!-- customize some of the properties --&gt;</code><br clear="none"><code class="java spaces">&#160;&#160;&#160;&#160;</code><code class="java plain">&lt;/bean&gt;</code><br clear="none"><code class="java spaces">&#160;</code>&#160;<br clear="none"><code class="java spaces">&#160;&#160;&#160;&#160;</code><code class="java plain">...</code><br clear="none">&#160;<br clear="none"><code class="java spaces">&#160;&#160;&#160;&#160;</code><code class="java plain">&lt;jaxrs:server id=</code><code class="java string">"sampleServer"</code> <code class="java plain">address=</code><code class="java string">"/swaggerSample"</code><code class="java plain">&gt;</code><br clear="none"><code class="java spaces">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</code><code class="java plain">&lt;jaxrs:serviceBeans&gt;</code><br clear="none"><code class="java spaces">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</code><code class="java plain">&lt;ref bean=</code><code class="java string">"sampleResource"</code> <code class="java plain">/&gt;</code><br clear="none"><code class="java spaces">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</code><code class="java plain">&lt;/jaxrs:serviceBeans&gt;</code><br clear="none"><code class="java spaces">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</code><code class="java plain">&lt;jaxrs:providers&gt;</code><br clear="none"><code class="java spaces">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</code><code class="java plain">&lt;ref bean=</code><code class="java string">"jsonProvider"</code> <code class="java plain">/&gt;</code><br clear="none"><code class="java spaces">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</code><code class="java plain">&lt;/jaxrs:providers&gt;</code><br clear="none"><code class="java spaces">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</code><code class="java plain">&lt;jaxrs:features&gt;</code><br clear="none"><code class="java spaces">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</code><code class="java plain">&lt;ref bean=</code><code class="java string">"openApiFeature"</code> <code class="java plain">/&gt;</code><br clear="none"><code class="java spaces">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</code><code class="java plain">&lt;/jaxrs:features&gt;</code><br clear="none"><code class="java spaces">&#160;&#160;&#160;&#160;</code><code class="java plain">&lt;/jaxrs:server&gt;</code><br clear="none"><code class="java plain">&lt;/beans&gt;</code></p></td></tr></tbody></table></div><h1 id="OpenApiFeature(Microprofile)-ConfiguringfromPropertyfiles">Configuring from Property files</h1><p>It is possible to supply the configuration from the property files. The default location for a properties file is "<strong>/swagger.properties</strong>". <strong>OpenApiFeature</strong> will pick it up if it is available, and the location can be overridden with a<strong> 'propertiesLocation</strong>' property.&#160;</p><p>Note that the properties, if available, do not override the properties which may have been set as suggested above from the code or Spring/Blueprint contexts or web.xml. Instead they complement and serve as the default configuration properties: for example, if some properties have been set from the code then the values for the same properties found in the properties file will not be used.</p><h1 id="OpenApiFeature(Microprofile)-EnablingSwaggerUI">Enabling Swagger UI</h1><p>Adding a Swagger UI Maven dependency is all what is needed to start accessing Swagger documents with the help of Swagger UI.</p><p><br clear="none"></p><div class="table-wrap"><table class="wrapped confluenceTable"><tbody><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code class="java plain">&lt;dependency&gt;</code><br clear="none"><code class="java spaces">&#160;&#160;&#160;&#160;</code><code class="java plain">&lt;groupId&gt;org.webjars&lt;/groupId&gt;</code><br clear="none"><code class="java spaces">&#160;&#160;&#160;&#160;</code><code class="java plain">&lt;artifactId&gt;swagger-ui&lt;/artifactId&gt;</code><br clear="none"><code class="java spaces">&#160;&#160;&#160;&#160;</code><code class="java plain">&lt;version&gt;</code><code class="java value">3.13</code><code class="java plain">.</code><code class="java value">0</code><code class="java plain">&lt;/version&gt;</code><br clear="none"><code class="java plain">&lt;/dependency&gt;</code></p></td></tr></tbody></table></div><p><br clear="none"></p><p>For example, let's assume a JAX-RS endpoint is published at '<span><a shape="rect" class="external-link" href="http://hostport" rel="nofollow">http://host:port/context/services/</a></span>'.</p><p>Open the browser and go to '<span><a shape="rect" class="external-link" href="http://hostport" rel="nofollow">http://host:port/context/services/</a></span>api-docs/?url=/openapi.json' which will return a Swagger UI page.</p><p>CXF Services page will also link to Swagger UI. Go to&#160;'<span><a shape="rect" class="external-link" rel="nofollow" href="http://hostport">http://host:port/context/services/</a></span>' and follow a Swagger link which will return a Swagger UI page.</p><p>See <a shape="rect" class="external-link" href="https://github.com/apache/cxf/tree/master/distribution/src/main/release/samples/jax_rs/description_openapi_microprofile_spring" rel="nofollow">samples/jax_rs/description_openapi_microprofile_spring</a> as an example.</p><p>To deactivate automatic Swagger UI integration please set<strong> 'supportSwaggerUi'</strong> property to "<strong>false</strong>".</p><h2 id="OpenApiFeature(Microprofile)-ConfiguringSwaggerUI">Configuring Swagger UI</h2><p>The <strong>OpenApiFeature</strong>&#160; has a way to pre-configure certain&#160; Swagger UI parameters (<a shape="rect" class="external-link" href="https://github.com/swagger-api/swagger-ui/blob/master/docs/usage/configuration.md" rel="nofollow">https://github.com/swagger-api/swagger-ui/blob/master/docs/usage/configuration.md</a>) through <strong><span class="blob-code-inner blob-code-marker-addition"><span class="pl-smi">SwaggerUiConfig</span></span></strong><span class="blob-code-inner blob-code-marker-addition">. The</span><strong><span class="blob-code-inner blob-code-marker-addition"> </span></strong>way it is implemented is by passing those parameters as a query string so the Swagger UI could adjust itself.</p><h1 id="OpenApiFeature(Microprofile)-Samples">Samples</h1><p><span>CXF's distribution contains the following samples.</span></p><ul><li><span><a shape="rect" class="external-link" href="https://github.com/apache/cxf/tree/master/distribution/src/main/release/samples/jax_rs/description_openapi_microprofile_spring" rel="nofollow">samples/jax_rs/description_openapi_microprofile_spring</a>: the <a shape="rect" class="external-link" rel="nofollow" href="https://github.com/OAI/OpenAPI-Specification/releases/tag/3.0.0">OpenAPI v3.0</a> standalone sample using Spring and OpenApiFeature programmatic configuration<br clear="none"></span></li></ul></div>
</div>
<!-- Content -->
</td>
</tr>
</table>
</td>
<td id="cell-2-2" colspan="2">&nbsp;</td>
</tr>
<tr>
<td id="cell-3-0">&nbsp;</td>
<td id="cell-3-1">&nbsp;</td>
<td id="cell-3-2">
<div id="footer">
<!-- Footer -->
<div id="site-footer">
<a href="http://cxf.apache.org/privacy-policy.html">Privacy Policy</a> -
(<a href="https://cwiki.apache.org/confluence/pages/editpage.action?pageId=158876852">edit page</a>)
(<a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=158876852&amp;showComments=true&amp;showCommentArea=true#addcomment">add comment</a>)<br>
Apache CXF, CXF, Apache, the Apache feather logo are trademarks of The Apache Software Foundation.<br>
All other marks mentioned may be trademarks or registered trademarks of their respective owners.
</div>
<!-- Footer -->
</div>
</td>
<td id="cell-3-3">&nbsp;</td>
<td id="cell-3-4">&nbsp;</td>
</tr>
<tr>
<td id="cell-4-0" colspan="2">&nbsp;</td>
<td id="cell-4-1">&nbsp;</td>
<td id="cell-4-2" colspan="2">&nbsp;</td>
</tr>
</table>
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-4458903-1");
pageTracker._trackPageview();
} catch(err) {}</script>
</body>
</html>