You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2015/09/18 17:44:04 UTC

[18/21] camel git commit: CAMEL-7800: camel-swagger-java - work in progress

CAMEL-7800: camel-swagger-java - work in progress


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

Branch: refs/heads/master
Commit: e2f5c9f075c89a8e74332e4f91a72f733fb0d4ca
Parents: 83341f2
Author: Claus Ibsen <da...@apache.org>
Authored: Fri Sep 18 16:06:07 2015 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Fri Sep 18 16:16:15 2015 +0200

----------------------------------------------------------------------
 .../swagger/DefaultCamelSwaggerServlet.java     | 91 --------------------
 .../camel/swagger/RestSwaggerCorsFilter.java    | 55 ++++++++++++
 .../camel/swagger/RestSwaggerServlet.java       | 91 ++++++++++++++++++++
 .../src/main/webapp/WEB-INF/web.xml             |  9 +-
 4 files changed, 149 insertions(+), 97 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/e2f5c9f0/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/DefaultCamelSwaggerServlet.java
----------------------------------------------------------------------
diff --git a/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/DefaultCamelSwaggerServlet.java b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/DefaultCamelSwaggerServlet.java
deleted file mode 100644
index b3c73e6..0000000
--- a/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/DefaultCamelSwaggerServlet.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/**
- * 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.camel.swagger;
-
-import java.lang.management.ManagementFactory;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
-import javax.management.MBeanServer;
-import javax.management.ObjectName;
-
-import org.apache.camel.model.ModelHelper;
-import org.apache.camel.model.rest.RestDefinition;
-import org.apache.camel.model.rest.RestsDefinition;
-import org.apache.camel.util.CamelVersionHelper;
-
-/**
- * The default Camel swagger servlet to use when exposing the APIs of the rest-dsl using swagger.
- * <p/>
- * This requires Camel version 2.15 or better at runtime (and JMX to be enabled).
- */
-public class DefaultCamelSwaggerServlet extends RestSwaggerAbstractServlet {
-
-    @Override
-    public List<RestDefinition> getRestDefinitions(String camelId) throws Exception {
-        ObjectName found = null;
-
-        MBeanServer server = ManagementFactory.getPlatformMBeanServer();
-        Set<ObjectName> names = server.queryNames(new ObjectName("org.apache.camel:type=context,*"), null);
-        for (ObjectName on : names) {
-            String id = on.getKeyProperty("name");
-            if (id.startsWith("\"") && id.endsWith("\"")) {
-                id = id.substring(1, id.length() - 1);
-            }
-            if (camelId == null || camelId.equals(id)) {
-                // filter out older Camel versions as this requires Camel 2.15 or better (rest-dsl)
-                String version = (String) server.getAttribute(on, "CamelVersion");
-                if (CamelVersionHelper.isGE("2.15.0", version)) {
-                    found = on;
-                }
-            }
-        }
-
-        if (found != null) {
-            String xml = (String) server.invoke(found, "dumpRestsAsXml", null, null);
-            if (xml != null) {
-                RestsDefinition rests = ModelHelper.createModelFromXml(null, xml, RestsDefinition.class);
-                if (rests != null) {
-                    return rests.getRests();
-                }
-            }
-        }
-
-        return null;
-    }
-
-    @Override
-    public List<String> findCamelContexts() throws Exception {
-        List<String> answer = new ArrayList<>();
-
-        MBeanServer server = ManagementFactory.getPlatformMBeanServer();
-        Set<ObjectName> names = server.queryNames(new ObjectName("*:type=context,*"), null);
-        for (ObjectName on : names) {
-            String id = on.getKeyProperty("name");
-            if (id.startsWith("\"") && id.endsWith("\"")) {
-                id = id.substring(1, id.length() - 1);
-            }
-
-            // filter out older Camel versions as this requires Camel 2.15 or better (rest-dsl)
-            String version = (String) server.getAttribute(on, "CamelVersion");
-            if (CamelVersionHelper.isGE("2.15.0", version)) {
-                answer.add(id);
-            }
-        }
-        return answer;
-    }
-}

http://git-wip-us.apache.org/repos/asf/camel/blob/e2f5c9f0/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerCorsFilter.java
----------------------------------------------------------------------
diff --git a/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerCorsFilter.java b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerCorsFilter.java
new file mode 100644
index 0000000..0cf7303
--- /dev/null
+++ b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerCorsFilter.java
@@ -0,0 +1,55 @@
+/**
+ * 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.camel.swagger;
+
+import java.io.IOException;
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * A simple CORS filter that can used to allow the swagger ui or other API browsers from remote origins to access the
+ * Rest services exposes by this Camel swagger component.
+ */
+public class RestSwaggerCorsFilter implements Filter {
+
+    @Override
+    public void init(FilterConfig filterConfig) throws ServletException {
+        // noop
+    }
+
+    @Override
+    public void destroy() {
+        // noop
+    }
+
+    @Override
+    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
+        HttpServletResponse res = (HttpServletResponse) response;
+
+        res.setHeader("Access-Control-Allow-Origin", "*");
+        res.setHeader("Access-Control-Allow-Methods", "GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, CONNECT, PATCH");
+        res.setHeader("Access-Control-Max-Age", "3600");
+        res.setHeader("Access-Control-Allow-Headers", "Origin, Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers");
+
+        chain.doFilter(request, response);
+    }
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/e2f5c9f0/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerServlet.java
----------------------------------------------------------------------
diff --git a/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerServlet.java b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerServlet.java
new file mode 100644
index 0000000..7d85e76
--- /dev/null
+++ b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerServlet.java
@@ -0,0 +1,91 @@
+/**
+ * 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.camel.swagger;
+
+import java.lang.management.ManagementFactory;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
+
+import org.apache.camel.model.ModelHelper;
+import org.apache.camel.model.rest.RestDefinition;
+import org.apache.camel.model.rest.RestsDefinition;
+import org.apache.camel.util.CamelVersionHelper;
+
+/**
+ * The default Camel swagger servlet to use when exposing the APIs of the rest-dsl using swagger.
+ * <p/>
+ * This requires Camel version 2.15 or better at runtime (and JMX to be enabled).
+ */
+public class RestSwaggerServlet extends RestSwaggerAbstractServlet {
+
+    @Override
+    public List<RestDefinition> getRestDefinitions(String camelId) throws Exception {
+        ObjectName found = null;
+
+        MBeanServer server = ManagementFactory.getPlatformMBeanServer();
+        Set<ObjectName> names = server.queryNames(new ObjectName("org.apache.camel:type=context,*"), null);
+        for (ObjectName on : names) {
+            String id = on.getKeyProperty("name");
+            if (id.startsWith("\"") && id.endsWith("\"")) {
+                id = id.substring(1, id.length() - 1);
+            }
+            if (camelId == null || camelId.equals(id)) {
+                // filter out older Camel versions as this requires Camel 2.15 or better (rest-dsl)
+                String version = (String) server.getAttribute(on, "CamelVersion");
+                if (CamelVersionHelper.isGE("2.15.0", version)) {
+                    found = on;
+                }
+            }
+        }
+
+        if (found != null) {
+            String xml = (String) server.invoke(found, "dumpRestsAsXml", null, null);
+            if (xml != null) {
+                RestsDefinition rests = ModelHelper.createModelFromXml(null, xml, RestsDefinition.class);
+                if (rests != null) {
+                    return rests.getRests();
+                }
+            }
+        }
+
+        return null;
+    }
+
+    @Override
+    public List<String> findCamelContexts() throws Exception {
+        List<String> answer = new ArrayList<>();
+
+        MBeanServer server = ManagementFactory.getPlatformMBeanServer();
+        Set<ObjectName> names = server.queryNames(new ObjectName("*:type=context,*"), null);
+        for (ObjectName on : names) {
+            String id = on.getKeyProperty("name");
+            if (id.startsWith("\"") && id.endsWith("\"")) {
+                id = id.substring(1, id.length() - 1);
+            }
+
+            // filter out older Camel versions as this requires Camel 2.15 or better (rest-dsl)
+            String version = (String) server.getAttribute(on, "CamelVersion");
+            if (CamelVersionHelper.isGE("2.15.0", version)) {
+                answer.add(id);
+            }
+        }
+        return answer;
+    }
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/e2f5c9f0/examples/camel-example-swagger-java/src/main/webapp/WEB-INF/web.xml
----------------------------------------------------------------------
diff --git a/examples/camel-example-swagger-java/src/main/webapp/WEB-INF/web.xml b/examples/camel-example-swagger-java/src/main/webapp/WEB-INF/web.xml
index 2979553..35527aa 100755
--- a/examples/camel-example-swagger-java/src/main/webapp/WEB-INF/web.xml
+++ b/examples/camel-example-swagger-java/src/main/webapp/WEB-INF/web.xml
@@ -41,11 +41,10 @@
     <load-on-startup>1</load-on-startup>
   </servlet>
 
-  <!-- START SNIPPET: e1 -->
-  <!-- to setup Camel Swagger api servlet -->
+  <!-- to setup Camel Swagger servlet -->
   <servlet>
     <servlet-name>ApiDeclarationServlet</servlet-name>
-    <servlet-class>org.apache.camel.swagger.DefaultCamelSwaggerServlet</servlet-class>
+    <servlet-class>org.apache.camel.swagger.RestSwaggerServlet</servlet-class>
     <init-param>
       <!-- we specify the base.path using relative notation, that means the actual path will be calculated at runtime as
            http://server:port/contextpath/rest -->
@@ -82,7 +81,6 @@
     <servlet-name>ApiDeclarationServlet</servlet-name>
     <url-pattern>/api-docs/*</url-pattern>
   </servlet-mapping>
-  <!-- END SNIPPET: e1 -->
 
   <!-- define that url path for the Camel Servlet to use -->
   <servlet-mapping>
@@ -90,7 +88,7 @@
     <url-pattern>/rest/*</url-pattern>
   </servlet-mapping>
 
-  <!-- enable CORS filter so people can use swagger ui to browse and test the apis
+  <!-- enable CORS filter so people can use swagger ui to browse and test the apis -->
   <filter>
     <filter-name>RestSwaggerCorsFilter</filter-name>
     <filter-class>org.apache.camel.swagger.RestSwaggerCorsFilter</filter-class>
@@ -101,7 +99,6 @@
     <url-pattern>/api-docs/*</url-pattern>
     <url-pattern>/rest/*</url-pattern>
   </filter-mapping>
-  -->
 
   <welcome-file-list>
       <welcome-file>home.html</welcome-file>