Repository: cxf
Updated Branches:
  refs/heads/3.1.x-fixes 3d9afadeb -> f3207adb1


CXF-7117: Swagger2Feature not working in OSGi container when jaxrs server 
address not attached to CXF servlet


Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/f3207adb
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/f3207adb
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/f3207adb

Branch: refs/heads/3.1.x-fixes
Commit: f3207adb13cbc93b578519e7ef8612fedfcc4634
Parents: 3d9afad
Author: reta <[email protected]>
Authored: Wed Nov 16 20:26:22 2016 -0500
Committer: reta <[email protected]>
Committed: Wed Nov 16 20:26:22 2016 -0500

----------------------------------------------------------------------
 .../jaxrs/swagger/DelegatingServletConfig.java  | 59 ++++++++++++++++++++
 .../cxf/jaxrs/swagger/Swagger2Feature.java      | 39 ++++---------
 .../jaxrs/swagger/SyntheticServletConfig.java   | 59 ++++++++++++++++++++
 3 files changed, 129 insertions(+), 28 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/f3207adb/rt/rs/description-swagger/src/main/java/org/apache/cxf/jaxrs/swagger/DelegatingServletConfig.java
----------------------------------------------------------------------
diff --git 
a/rt/rs/description-swagger/src/main/java/org/apache/cxf/jaxrs/swagger/DelegatingServletConfig.java
 
b/rt/rs/description-swagger/src/main/java/org/apache/cxf/jaxrs/swagger/DelegatingServletConfig.java
new file mode 100644
index 0000000..a64f3a5
--- /dev/null
+++ 
b/rt/rs/description-swagger/src/main/java/org/apache/cxf/jaxrs/swagger/DelegatingServletConfig.java
@@ -0,0 +1,59 @@
+/**
+ * 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.
+ */
+package org.apache.cxf.jaxrs.swagger;
+
+import java.util.Enumeration;
+import java.util.Objects;
+
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletContext;
+
+import io.swagger.jaxrs.config.SwaggerContextService;
+
+class DelegatingServletConfig implements ServletConfig {
+    private final ServletConfig delegate;
+    
+    DelegatingServletConfig(final ServletConfig sc) {
+        this.delegate = sc;
+    }
+    
+    @Override
+    public String getServletName() {
+        return delegate.getServletName();
+    }
+    
+    @Override
+    public ServletContext getServletContext() {
+        return delegate.getServletContext();
+    }
+    
+    @Override
+    public Enumeration<String> getInitParameterNames() {
+        return delegate.getInitParameterNames();
+    }
+    
+    @Override
+    public String getInitParameter(String name) {
+        if (Objects.equals(SwaggerContextService.USE_PATH_BASED_CONFIG, name)) 
{
+            return "true";
+        } else {
+            return delegate.getInitParameter(name);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/cxf/blob/f3207adb/rt/rs/description-swagger/src/main/java/org/apache/cxf/jaxrs/swagger/Swagger2Feature.java
----------------------------------------------------------------------
diff --git 
a/rt/rs/description-swagger/src/main/java/org/apache/cxf/jaxrs/swagger/Swagger2Feature.java
 
b/rt/rs/description-swagger/src/main/java/org/apache/cxf/jaxrs/swagger/Swagger2Feature.java
index e15cea0..b417927 100644
--- 
a/rt/rs/description-swagger/src/main/java/org/apache/cxf/jaxrs/swagger/Swagger2Feature.java
+++ 
b/rt/rs/description-swagger/src/main/java/org/apache/cxf/jaxrs/swagger/Swagger2Feature.java
@@ -22,14 +22,12 @@ import java.io.IOException;
 import java.net.URI;
 import java.net.URL;
 import java.util.ArrayList;
-import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.LinkedHashSet;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
-import java.util.Objects;
 import java.util.Set;
 import java.util.regex.Pattern;
 
@@ -278,32 +276,17 @@ public class Swagger2Feature extends 
AbstractSwaggerFeature {
         public ServletConfig createContext(Message message) {
             final ServletConfig sc = (ServletConfig)message.get("HTTP.CONFIG");
             
-            if (sc != null && 
sc.getInitParameter(SwaggerContextService.USE_PATH_BASED_CONFIG) == null) {
-                return new ServletConfig() {
-                    @Override
-                    public String getServletName() {
-                        return sc.getServletName();
-                    }
-                    
-                    @Override
-                    public ServletContext getServletContext() {
-                        return sc.getServletContext();
-                    }
-                    
-                    @Override
-                    public Enumeration<String> getInitParameterNames() {
-                        return sc.getInitParameterNames();
-                    }
-                    
-                    @Override
-                    public String getInitParameter(String name) {
-                        if 
(Objects.equals(SwaggerContextService.USE_PATH_BASED_CONFIG, name)) {
-                            return "true";
-                        } else {
-                            return sc.getInitParameter(name);
-                        }
-                    }
-                };
+            // When deploying into OSGi container, it is possible to use 
embedded Jetty
+            // transport. In this case, the ServletConfig is not available and 
Swagger 
+            // does not take into account certain configuration parameters. To 
overcome 
+            // that, the ServletConfig is synthesized from ServletContext 
instance.
+            if (sc == null) {
+                final ServletContext context = 
(ServletContext)message.get("HTTP.CONTEXT");
+                if (context != null) {
+                    return new SyntheticServletConfig(context);
+                }
+            } else if (sc != null && 
sc.getInitParameter(SwaggerContextService.USE_PATH_BASED_CONFIG) == null) {
+                return new DelegatingServletConfig(sc);
             }
             
             return sc;

http://git-wip-us.apache.org/repos/asf/cxf/blob/f3207adb/rt/rs/description-swagger/src/main/java/org/apache/cxf/jaxrs/swagger/SyntheticServletConfig.java
----------------------------------------------------------------------
diff --git 
a/rt/rs/description-swagger/src/main/java/org/apache/cxf/jaxrs/swagger/SyntheticServletConfig.java
 
b/rt/rs/description-swagger/src/main/java/org/apache/cxf/jaxrs/swagger/SyntheticServletConfig.java
new file mode 100644
index 0000000..2e17a6f
--- /dev/null
+++ 
b/rt/rs/description-swagger/src/main/java/org/apache/cxf/jaxrs/swagger/SyntheticServletConfig.java
@@ -0,0 +1,59 @@
+/**
+ * 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.
+ */
+package org.apache.cxf.jaxrs.swagger;
+
+import java.util.Enumeration;
+import java.util.Objects;
+
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletContext;
+
+import io.swagger.jaxrs.config.SwaggerContextService;
+
+class SyntheticServletConfig implements ServletConfig {
+    private final ServletContext delegate;
+    
+    SyntheticServletConfig(final ServletContext context) {
+        this.delegate = context;
+    }
+    
+    @Override
+    public String getServletName() {
+        return null; /* no servlet available */
+    }
+    
+    @Override
+    public ServletContext getServletContext() {
+        return delegate;
+    }
+    
+    @Override
+    public Enumeration<String> getInitParameterNames() {
+        return delegate.getInitParameterNames();
+    }
+    
+    @Override
+    public String getInitParameter(String name) {
+        if (Objects.equals(SwaggerContextService.USE_PATH_BASED_CONFIG, name)) 
{
+            return "true";
+        } else {
+            return delegate.getInitParameter(name);
+        }
+    }
+}

Reply via email to