You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by re...@apache.org on 2019/05/22 21:17:40 UTC

[cxf] branch master updated: CXF-8046: Resource Listing in CXF 3.3.x does not recognize OpenAPI endpoints

This is an automated email from the ASF dual-hosted git repository.

reta pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cxf.git


The following commit(s) were added to refs/heads/master by this push:
     new 85b7563  CXF-8046: Resource Listing in CXF 3.3.x does not recognize OpenAPI endpoints
85b7563 is described below

commit 85b75632f62ea5cabdb4909f2ec4844b6bd4389c
Author: reta <dr...@gmail.com>
AuthorDate: Wed May 22 17:17:15 2019 -0400

    CXF-8046: Resource Listing in CXF 3.3.x does not recognize OpenAPI endpoints
---
 .../apache/cxf/jaxrs/openapi/OpenApiFeature.java   |  2 +
 .../servicelist/FormattedServiceListWriter.java    | 53 +++++++++++++++-------
 .../servicelist/UnformattedServiceListWriter.java  |  6 ++-
 3 files changed, 43 insertions(+), 18 deletions(-)

diff --git a/rt/rs/description-openapi-v3/src/main/java/org/apache/cxf/jaxrs/openapi/OpenApiFeature.java b/rt/rs/description-openapi-v3/src/main/java/org/apache/cxf/jaxrs/openapi/OpenApiFeature.java
index c774b40..2d8f606 100644
--- a/rt/rs/description-openapi-v3/src/main/java/org/apache/cxf/jaxrs/openapi/OpenApiFeature.java
+++ b/rt/rs/description-openapi-v3/src/main/java/org/apache/cxf/jaxrs/openapi/OpenApiFeature.java
@@ -182,6 +182,8 @@ public class OpenApiFeature extends AbstractFeature implements SwaggerUiSupport,
             if (customizer != null) {
                 customizer.setApplicationInfo(factory.getApplicationProvider());
             }
+            
+            bus.setProperty("openapi.service.description.available", "true");
         } catch (OpenApiConfigurationException ex) {
             throw new RuntimeException("Unable to initialize OpenAPI context", ex);
         }
diff --git a/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/servicelist/FormattedServiceListWriter.java b/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/servicelist/FormattedServiceListWriter.java
index 04fe879..efadf8b 100644
--- a/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/servicelist/FormattedServiceListWriter.java
+++ b/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/servicelist/FormattedServiceListWriter.java
@@ -179,30 +179,49 @@ public class FormattedServiceListWriter implements ServiceListWriter {
             sb = ((AbstractHTTPDestination)sd).getBus();
         }        
         
+        addWadlIfNeeded(absoluteURL, sb, writer);
+        addOpenApiIfNeeded(absoluteURL, sb, writer);
+        addSwaggerIfNeeded(absoluteURL, sb, writer);
+        addAtomLinkIfNeeded(absoluteURL, atomMap, writer);
+        writer.write("</td></tr>");
+    }
+
+    private static void addWadlIfNeeded(String absoluteURL, Bus sb, PrintWriter writer) {
         if (sb != null && PropertyUtils.isTrue(sb.getProperty("wadl.service.description.available"))) {
             writer.write("<br/><span class=\"field\">WADL :</span> " + "<a href=\"" + absoluteURL
                      + "?_wadl\">" + absoluteURL + "?_wadl" + "</a>");
         }
+    }
+
+    private static void addSwaggerIfNeeded(String absoluteURL, Bus sb, PrintWriter writer) {
         if (sb != null && PropertyUtils.isTrue(sb.getProperty("swagger.service.description.available"))) {
-            String swaggerPath = "swagger.json";
-            if (PropertyUtils.isTrue(sb.getProperty("swagger.service.ui.available"))) {
-                URI uri = URI.create(absoluteURL);
-                String schemePath = uri.getScheme() + "://" + uri.getHost()
-                    + (uri.getPort() == -1 ? "" : ":" + uri.getPort());
-                String relPath = absoluteURL.substring(schemePath.length());
-                if (!relPath.endsWith("/")) {
-                    relPath += "/";
-                }
-                swaggerPath = "api-docs?url=" + relPath + swaggerPath;
-            }
-            if (!absoluteURL.endsWith("/")) {
-                swaggerPath = "/" + swaggerPath;
+            writeApiSpec(absoluteURL, sb, writer, "swagger.json", "Swagger");
+        }
+    }
+
+    private static void addOpenApiIfNeeded(String absoluteURL, Bus sb, PrintWriter writer) {
+        if (sb != null && PropertyUtils.isTrue(sb.getProperty("openapi.service.description.available"))) {
+            writeApiSpec(absoluteURL, sb, writer, "openapi.json", "OpenAPI");
+        }
+    }
+
+    private static void writeApiSpec(String absoluteURL, Bus sb, PrintWriter writer, 
+            String specPath, String specName) {
+        if (PropertyUtils.isTrue(sb.getProperty("swagger.service.ui.available"))) {
+            URI uri = URI.create(absoluteURL);
+            String schemePath = uri.getScheme() + "://" + uri.getHost()
+                + (uri.getPort() == -1 ? "" : ":" + uri.getPort());
+            String relPath = absoluteURL.substring(schemePath.length());
+            if (!relPath.endsWith("/")) {
+                relPath += "/";
             }
-            writer.write("<br/><span class=\"field\">Swagger :</span> " + "<a href=\"" + absoluteURL
-                     + swaggerPath + "\">" + absoluteURL + swaggerPath + "</a>");
+            specPath = "api-docs?url=" + relPath + specPath;
         }
-        addAtomLinkIfNeeded(absoluteURL, atomMap, writer);
-        writer.write("</td></tr>");
+        if (!absoluteURL.endsWith("/")) {
+            specPath = "/" + specPath;
+        }
+        writer.write("<br/><span class=\"field\">" + specName + " :</span> " + "<a href=\"" + absoluteURL
+                 + specPath + "\">" + absoluteURL + specPath + "</a>");
     }
 
     private static void addAtomLinkIfNeeded(String address, Map<String, String> extMap, PrintWriter pw) {
diff --git a/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/servicelist/UnformattedServiceListWriter.java b/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/servicelist/UnformattedServiceListWriter.java
index 49929de..b5aea51 100644
--- a/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/servicelist/UnformattedServiceListWriter.java
+++ b/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/servicelist/UnformattedServiceListWriter.java
@@ -78,6 +78,8 @@ public class UnformattedServiceListWriter implements ServiceListWriter {
                 && PropertyUtils.isTrue(bus.getProperty("wadl.service.descrition.available"));
             boolean swaggerAvailable = bus != null
                 && PropertyUtils.isTrue(bus.getProperty("swagger.service.descrition.available"));
+            boolean openApiAvailable = bus != null
+                && PropertyUtils.isTrue(bus.getProperty("openapi.service.descrition.available"));
             if (!wadlAvailable && !swaggerAvailable) {
                 writer.write(address + "\n");
                 return;
@@ -88,7 +90,9 @@ public class UnformattedServiceListWriter implements ServiceListWriter {
             if (swaggerAvailable) {
                 writer.write(address + "/swagger.json\n");
             }
-
+            if (openApiAvailable) {
+                writer.write(address + "/openapi.json\n");
+            }
         }
     }