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

ilgrosso pushed a commit to branch 3.1.x-fixes
in repository https://gitbox.apache.org/repos/asf/cxf.git


The following commit(s) were added to refs/heads/3.1.x-fixes by this push:
     new def576f  [CXF-7525] Support dynamic basePath (when used via 
Swagger2Customizer) and fix recursive ref under components/schemas
def576f is described below

commit def576ff5f1fccc0115a929377af0a017ca25104
Author: Francesco Chicchiriccò <ilgro...@apache.org>
AuthorDate: Tue Jan 2 16:14:06 2018 +0100

    [CXF-7525] Support dynamic basePath (when used via Swagger2Customizer) and 
fix recursive ref under components/schemas
---
 .../openapi/SwaggerToOpenApiConversionFilter.java  | 15 +++++--
 .../openapi/SwaggerToOpenApiConversionUtils.java   | 50 ++++++++++++----------
 2 files changed, 39 insertions(+), 26 deletions(-)

diff --git 
a/rt/rs/description-swagger/src/main/java/org/apache/cxf/jaxrs/swagger/openapi/SwaggerToOpenApiConversionFilter.java
 
b/rt/rs/description-swagger/src/main/java/org/apache/cxf/jaxrs/swagger/openapi/SwaggerToOpenApiConversionFilter.java
index 88332ca..3da18a4 100644
--- 
a/rt/rs/description-swagger/src/main/java/org/apache/cxf/jaxrs/swagger/openapi/SwaggerToOpenApiConversionFilter.java
+++ 
b/rt/rs/description-swagger/src/main/java/org/apache/cxf/jaxrs/swagger/openapi/SwaggerToOpenApiConversionFilter.java
@@ -33,6 +33,7 @@ import javax.ws.rs.ext.WriterInterceptorContext;
 import org.apache.cxf.common.util.StringUtils;
 import org.apache.cxf.helpers.IOUtils;
 import org.apache.cxf.io.CachedOutputStream;
+import org.apache.cxf.jaxrs.ext.MessageContext;
 import org.apache.cxf.jaxrs.utils.JAXRSUtils;
 
 @Provider
@@ -42,7 +43,7 @@ public final class SwaggerToOpenApiConversionFilter 
implements ContainerRequestF
     private static final String SWAGGER_PATH = "swagger.json";
     private static final String OPEN_API_PATH = "openapi.json";
     private static final String OPEN_API_PROPERTY = "openapi";
-    
+
     private OpenApiConfiguration openApiConfig;
     @Override
     public void filter(ContainerRequestContext reqCtx) throws IOException {
@@ -51,9 +52,9 @@ public final class SwaggerToOpenApiConversionFilter 
implements ContainerRequestF
             reqCtx.setRequestUri(URI.create(SWAGGER_PATH));
             
JAXRSUtils.getCurrentMessage().getExchange().put(OPEN_API_PROPERTY, 
Boolean.TRUE);
         }
-        
+
     }
-    
+
     public OpenApiConfiguration getOpenApiConfig() {
         return openApiConfig;
     }
@@ -70,7 +71,8 @@ public final class SwaggerToOpenApiConversionFilter 
implements ContainerRequestF
             context.setOutputStream(cos);
             context.proceed();
             String swaggerJson = 
IOUtils.readStringFromStream(cos.getInputStream());
-            String openApiJson = 
SwaggerToOpenApiConversionUtils.getOpenApiFromSwaggerJson(swaggerJson, 
openApiConfig);
+            String openApiJson = 
SwaggerToOpenApiConversionUtils.getOpenApiFromSwaggerJson(
+                    createMessageContext(), swaggerJson, openApiConfig);
             os.write(StringUtils.toBytesUTF8(openApiJson));
             os.flush();
         } else {
@@ -78,6 +80,11 @@ public final class SwaggerToOpenApiConversionFilter 
implements ContainerRequestF
         }
     }
 
+    private MessageContext createMessageContext() {
+        return JAXRSUtils.createContextValue(
+                JAXRSUtils.getCurrentMessage(), null, MessageContext.class);
+    }
+
     private boolean isOpenApiRequested() {
         return Boolean.TRUE == 
JAXRSUtils.getCurrentMessage().getExchange().get(OPEN_API_PROPERTY);
     }
diff --git 
a/rt/rs/description-swagger/src/main/java/org/apache/cxf/jaxrs/swagger/openapi/SwaggerToOpenApiConversionUtils.java
 
b/rt/rs/description-swagger/src/main/java/org/apache/cxf/jaxrs/swagger/openapi/SwaggerToOpenApiConversionUtils.java
index fbfdb43..63e3274 100644
--- 
a/rt/rs/description-swagger/src/main/java/org/apache/cxf/jaxrs/swagger/openapi/SwaggerToOpenApiConversionUtils.java
+++ 
b/rt/rs/description-swagger/src/main/java/org/apache/cxf/jaxrs/swagger/openapi/SwaggerToOpenApiConversionUtils.java
@@ -20,6 +20,7 @@ package org.apache.cxf.jaxrs.swagger.openapi;
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.net.URI;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.Iterator;
@@ -35,6 +36,7 @@ import org.apache.cxf.common.logging.LogUtils;
 import org.apache.cxf.common.util.StringUtils;
 import org.apache.cxf.helpers.CastUtils;
 import org.apache.cxf.helpers.IOUtils;
+import org.apache.cxf.jaxrs.ext.MessageContext;
 import org.apache.cxf.jaxrs.json.basic.JsonMapObject;
 import org.apache.cxf.jaxrs.json.basic.JsonMapObjectReaderWriter;
 import org.apache.cxf.jaxrs.utils.ExceptionUtils;
@@ -77,14 +79,16 @@ public final class SwaggerToOpenApiConversionUtils {
     }
     
     public static String getOpenApiFromSwaggerStream(InputStream is, 
OpenApiConfiguration cfg) throws IOException {
-        return getOpenApiFromSwaggerJson(IOUtils.readStringFromStream(is), 
cfg);
+        return getOpenApiFromSwaggerJson(null, 
IOUtils.readStringFromStream(is), cfg);
     }
     
     public static String getOpenApiFromSwaggerJson(String json) throws 
IOException {
-        return getOpenApiFromSwaggerJson(json, null);
+        return getOpenApiFromSwaggerJson(null, json, null);
     }
     
-    public static String getOpenApiFromSwaggerJson(String json, 
OpenApiConfiguration cfg) throws IOException {
+    public static String getOpenApiFromSwaggerJson(
+            MessageContext ctx, String json, OpenApiConfiguration cfg) throws 
IOException {
+
         JsonMapObjectReaderWriter readerWriter = new 
JsonMapObjectReaderWriter();
         JsonMapObject sw2 = readerWriter.fromJsonToJsonObject(json);
         JsonMapObject sw3 = new JsonMapObject();
@@ -93,7 +97,7 @@ public final class SwaggerToOpenApiConversionUtils {
         sw3.setProperty("openapi", "3.0.0");
         
         // "servers"
-        setServersProperty(sw2, sw3);
+        setServersProperty(ctx, sw2, sw3);
         
         // "info"
         JsonMapObject infoObject = sw2.getJsonMapProperty("info");
@@ -121,7 +125,7 @@ public final class SwaggerToOpenApiConversionUtils {
             sw3.setProperty("externalDocs", externalDocsObject);
         }
         
-        return readerWriter.toJson(sw3);
+        return readerWriter.toJson(sw3).replace("#/definitions/", 
"#/components/schemas/");
     }
     
     private static void setComponentsProperty(JsonMapObject sw2, JsonMapObject 
sw3,
@@ -145,7 +149,6 @@ public final class SwaggerToOpenApiConversionUtils {
         }
         
         sw3.setProperty("components", comps);
-        
     }
     
     private static void setPathsProperty(JsonMapObject sw2, JsonMapObject sw3,
@@ -165,8 +168,6 @@ public final class SwaggerToOpenApiConversionUtils {
         }
         
         sw3.setProperty("paths", sw2Paths);
-        
-        
     }
     
     private static void prepareResponses(JsonMapObject sw2PathVerbProps) {
@@ -206,7 +207,6 @@ public final class SwaggerToOpenApiConversionUtils {
             }
             sw2PathVerbProps.setProperty("responses", sw3PathVerbResps);
         }
-        
     }
 
     private static void prepareRequestBody(JsonMapObject sw2PathVerbProps, 
@@ -301,7 +301,6 @@ public final class SwaggerToOpenApiConversionUtils {
                 }
             }
         }
-        
     }
 
     private static JsonMapObject prepareFormContent(List<JsonMapObject> 
formList, List<String> mediaTypes) {
@@ -327,6 +326,7 @@ public final class SwaggerToOpenApiConversionUtils {
         content.setProperty(mediaType, formType);
         return content;
     }
+
     private static JsonMapObject prepareContentFromSchema(JsonMapObject schema,
                                                           List<String> 
mediaTypes,
                                                           boolean 
storeModelName) {
@@ -351,8 +351,6 @@ public final class SwaggerToOpenApiConversionUtils {
                 } else {
                     items.setProperty("$ref", "#components/schemas/" + 
modelName);
                 }
-                
-                
             }
         }
         JsonMapObject content = new JsonMapObject();
@@ -372,22 +370,30 @@ public final class SwaggerToOpenApiConversionUtils {
         return content;
     }
 
-    private static void setServersProperty(JsonMapObject sw2, JsonMapObject 
sw3) {
-        String sw2Host = sw2.getStringProperty("host");
-        String sw2BasePath = sw2.getStringProperty("basePath");
-        String sw2Scheme = null;
+    private static void setServersProperty(MessageContext ctx, JsonMapObject 
sw2, JsonMapObject sw3) {
+        URI requestURI = ctx == null ? null : 
URI.create(ctx.getHttpServletRequest().getRequestURL().toString());
+
         List<String> sw2Schemes = sw2.getListStringProperty("schemes");
+        String sw2Scheme;
         if (StringUtils.isEmpty(sw2Schemes)) {
-            sw2Scheme = "https";
+            if (requestURI == null) {
+                sw2Scheme = "https";
+            } else {
+                sw2Scheme = requestURI.getScheme();
+            }
         } else {
             sw2Scheme = sw2Schemes.get(0);
         }
+
+        String sw2Host = sw2.getStringProperty("host");
+        if (sw2Host == null && requestURI != null) {
+            sw2Host = requestURI.getHost() + ":" + requestURI.getPort();
+        }
+
+        String sw2BasePath = sw2.getStringProperty("basePath");
+
         String sw3ServerUrl = sw2Scheme + "://" + sw2Host + sw2BasePath;
-        sw3.setProperty("servers", 
-            Collections.singletonList(
-                Collections.singletonMap("url", sw3ServerUrl)));
-        
+        sw3.setProperty("servers", 
Collections.singletonList(Collections.singletonMap("url", sw3ServerUrl)));
     }
 
-    
 }

-- 
To stop receiving notification emails like this one, please contact
['"commits@cxf.apache.org" <commits@cxf.apache.org>'].

Reply via email to