Repository: camel Updated Branches: refs/heads/master 8ce5a2b2f -> e98a801b5
CAMEL-8545: camel-swagger-java to run outside servlet - 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/e82caac4 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/e82caac4 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/e82caac4 Branch: refs/heads/master Commit: e82caac4605d8a7dc55a5cac2629f5a9b21b9c08 Parents: 646c9bc Author: Claus Ibsen <davscl...@apache.org> Authored: Tue Sep 22 17:33:34 2015 +0200 Committer: Claus Ibsen <davscl...@apache.org> Committed: Wed Sep 23 07:51:03 2015 +0200 ---------------------------------------------------------------------- .../camel/spi/RestApiResponseAdapter.java | 32 --------- .../spi/RestApiResponseAdapterFactory.java | 34 --------- .../netty4/http/NettyHttpComponent.java | 70 +++++++++++++++--- .../http/NettyRestApiResponseAdapter.java | 48 ------------- .../http/handlers/HttpClientChannelHandler.java | 3 +- components/camel-swagger-java/pom.xml | 5 ++ .../swagger/ExchangeRestApiResponseAdapter.java | 45 ++++++++++++ .../camel/swagger/RestApiResponseAdapter.java | 28 ++++++++ .../camel/swagger/RestSwaggerProcessor.java | 76 +------------------- .../camel/swagger/RestSwaggerSupport.java | 23 ++++-- .../swagger/servlet/RestSwaggerServlet.java | 6 +- .../servlet/ServletRestApiResponseAdapter.java | 2 +- .../apache/camel/swagger/RestApiNettyTest.java | 65 +++++++++++++++++ 13 files changed, 230 insertions(+), 207 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/e82caac4/camel-core/src/main/java/org/apache/camel/spi/RestApiResponseAdapter.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/spi/RestApiResponseAdapter.java b/camel-core/src/main/java/org/apache/camel/spi/RestApiResponseAdapter.java deleted file mode 100644 index 01b1e4f..0000000 --- a/camel-core/src/main/java/org/apache/camel/spi/RestApiResponseAdapter.java +++ /dev/null @@ -1,32 +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.spi; - -import java.io.IOException; - -/** - * An adapter to allow Camel rest-api to use Camel components to render the api response. - */ -public interface RestApiResponseAdapter { - - void addHeader(String name, String value); - - void writeBytes(byte[] bytes) throws IOException; - - void noContent(); - -} http://git-wip-us.apache.org/repos/asf/camel/blob/e82caac4/camel-core/src/main/java/org/apache/camel/spi/RestApiResponseAdapterFactory.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/spi/RestApiResponseAdapterFactory.java b/camel-core/src/main/java/org/apache/camel/spi/RestApiResponseAdapterFactory.java deleted file mode 100644 index 71bffd8..0000000 --- a/camel-core/src/main/java/org/apache/camel/spi/RestApiResponseAdapterFactory.java +++ /dev/null @@ -1,34 +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.spi; - -import org.apache.camel.Exchange; - -/** - * Factory to create {@link RestApiResponseAdapter} which allows Camel components - * to provide a response adapter to be used by the rest-dsl api support. - */ -public interface RestApiResponseAdapterFactory { - - /** - * Creates a new {@link RestApiResponseAdapter} - * - * @param exchange the exchange - * @return the adapter - */ - RestApiResponseAdapter newAdapter(Exchange exchange); -} http://git-wip-us.apache.org/repos/asf/camel/blob/e82caac4/components/camel-netty4-http/src/main/java/org/apache/camel/component/netty4/http/NettyHttpComponent.java ---------------------------------------------------------------------- diff --git a/components/camel-netty4-http/src/main/java/org/apache/camel/component/netty4/http/NettyHttpComponent.java b/components/camel-netty4-http/src/main/java/org/apache/camel/component/netty4/http/NettyHttpComponent.java index d036cff..9012d93 100644 --- a/components/camel-netty4-http/src/main/java/org/apache/camel/component/netty4/http/NettyHttpComponent.java +++ b/components/camel-netty4-http/src/main/java/org/apache/camel/component/netty4/http/NettyHttpComponent.java @@ -24,7 +24,6 @@ import java.util.Map; import org.apache.camel.CamelContext; import org.apache.camel.Consumer; import org.apache.camel.Endpoint; -import org.apache.camel.Exchange; import org.apache.camel.Processor; import org.apache.camel.component.netty4.NettyComponent; import org.apache.camel.component.netty4.NettyConfiguration; @@ -32,8 +31,7 @@ import org.apache.camel.component.netty4.NettyServerBootstrapConfiguration; import org.apache.camel.component.netty4.http.handlers.HttpServerMultiplexChannelHandler; import org.apache.camel.spi.HeaderFilterStrategy; import org.apache.camel.spi.HeaderFilterStrategyAware; -import org.apache.camel.spi.RestApiResponseAdapter; -import org.apache.camel.spi.RestApiResponseAdapterFactory; +import org.apache.camel.spi.RestApiConsumerFactory; import org.apache.camel.spi.RestConfiguration; import org.apache.camel.spi.RestConsumerFactory; import org.apache.camel.util.FileUtil; @@ -49,7 +47,7 @@ import org.slf4j.LoggerFactory; /** * Netty HTTP based component. */ -public class NettyHttpComponent extends NettyComponent implements HeaderFilterStrategyAware, RestConsumerFactory, RestApiResponseAdapterFactory { +public class NettyHttpComponent extends NettyComponent implements HeaderFilterStrategyAware, RestConsumerFactory, RestApiConsumerFactory { private static final Logger LOG = LoggerFactory.getLogger(NettyHttpComponent.class); @@ -300,12 +298,66 @@ public class NettyHttpComponent extends NettyComponent implements HeaderFilterSt } @Override - public RestApiResponseAdapter newAdapter(Exchange exchange) { - NettyHttpMessage http = exchange.getIn(NettyHttpMessage.class); - if (http != null) { - return new NettyRestApiResponseAdapter(http.getHttpResponse()); + public Consumer createApiConsumer(CamelContext camelContext, Processor processor, String contextPath, Map<String, Object> parameters) throws Exception { + String path = FileUtil.stripLeadingSeparator(contextPath); + + String scheme = "http"; + String host = ""; + int port = 0; + + // if no explicit port/host configured, then use port from rest configuration + RestConfiguration config = getCamelContext().getRestConfiguration("netty4-http", true); + if (config.getScheme() != null) { + scheme = config.getScheme(); + } + if (config.getHost() != null) { + host = config.getHost(); + } + int num = config.getPort(); + if (num > 0) { + port = num; + } + + // if no explicit hostname set then resolve the hostname + if (ObjectHelper.isEmpty(host)) { + if (config.getRestHostNameResolver() == RestConfiguration.RestHostNameResolver.localHostName) { + host = HostUtils.getLocalHostName(); + } else if (config.getRestHostNameResolver() == RestConfiguration.RestHostNameResolver.localIp) { + host = HostUtils.getLocalIp(); + } } - return null; + + Map<String, Object> map = new HashMap<String, Object>(); + // build query string, and append any endpoint configuration properties + if (config != null && (config.getComponent() == null || config.getComponent().equals("netty4-http"))) { + // setup endpoint options + if (config.getEndpointProperties() != null && !config.getEndpointProperties().isEmpty()) { + map.putAll(config.getEndpointProperties()); + } + } + + String query = URISupport.createQueryString(map); + + String url = "netty4-http:%s://%s:%s/%s?httpMethodRestrict=%s&matchOnUriPrefix=true"; + // must use upper case for restrict + String restrict = "GET"; + // get the endpoint + url = String.format(url, scheme, host, port, path, restrict); + + if (!query.isEmpty()) { + url = url + "&" + query; + } + + NettyHttpEndpoint endpoint = camelContext.getEndpoint(url, NettyHttpEndpoint.class); + setProperties(endpoint, parameters); + + // configure consumer properties + Consumer consumer = endpoint.createConsumer(processor); + if (config != null && config.getConsumerProperties() != null && !config.getConsumerProperties().isEmpty()) { + setProperties(consumer, config.getConsumerProperties()); + } + + return consumer; } @Override http://git-wip-us.apache.org/repos/asf/camel/blob/e82caac4/components/camel-netty4-http/src/main/java/org/apache/camel/component/netty4/http/NettyRestApiResponseAdapter.java ---------------------------------------------------------------------- diff --git a/components/camel-netty4-http/src/main/java/org/apache/camel/component/netty4/http/NettyRestApiResponseAdapter.java b/components/camel-netty4-http/src/main/java/org/apache/camel/component/netty4/http/NettyRestApiResponseAdapter.java deleted file mode 100644 index 263f1e3..0000000 --- a/components/camel-netty4-http/src/main/java/org/apache/camel/component/netty4/http/NettyRestApiResponseAdapter.java +++ /dev/null @@ -1,48 +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.component.netty4.http; - -import java.io.IOException; - -import io.netty.handler.codec.http.FullHttpResponse; -import io.netty.handler.codec.http.HttpResponseStatus; -import org.apache.camel.spi.RestApiResponseAdapter; - -public class NettyRestApiResponseAdapter implements RestApiResponseAdapter { - - private final FullHttpResponse httpResponse; - - public NettyRestApiResponseAdapter(FullHttpResponse httpResponse) { - this.httpResponse = httpResponse; - } - - @Override - public void addHeader(String name, String value) { - httpResponse.headers().set(name, value); - } - - @Override - public void writeBytes(byte[] bytes) throws IOException { - httpResponse.content().writeBytes(bytes); - } - - @Override - public void noContent() { - httpResponse.setStatus(HttpResponseStatus.NO_CONTENT); - - } -} http://git-wip-us.apache.org/repos/asf/camel/blob/e82caac4/components/camel-netty4-http/src/main/java/org/apache/camel/component/netty4/http/handlers/HttpClientChannelHandler.java ---------------------------------------------------------------------- diff --git a/components/camel-netty4-http/src/main/java/org/apache/camel/component/netty4/http/handlers/HttpClientChannelHandler.java b/components/camel-netty4-http/src/main/java/org/apache/camel/component/netty4/http/handlers/HttpClientChannelHandler.java index 6657c24..1a9ab1e 100644 --- a/components/camel-netty4-http/src/main/java/org/apache/camel/component/netty4/http/handlers/HttpClientChannelHandler.java +++ b/components/camel-netty4-http/src/main/java/org/apache/camel/component/netty4/http/handlers/HttpClientChannelHandler.java @@ -26,9 +26,8 @@ import org.apache.camel.component.netty4.handlers.ClientChannelHandler; import org.apache.camel.component.netty4.http.NettyHttpProducer; /** - * Netty HTTP {@link org.apache.camel.component.netty.handlers.ClientChannelHandler} that handles the response combing + * Netty HTTP {@link org.apache.camel.component.netty4.handlers.ClientChannelHandler} that handles the response combing * back from the HTTP server, called by this client. - * */ public class HttpClientChannelHandler extends ClientChannelHandler { private final NettyHttpProducer producer; http://git-wip-us.apache.org/repos/asf/camel/blob/e82caac4/components/camel-swagger-java/pom.xml ---------------------------------------------------------------------- diff --git a/components/camel-swagger-java/pom.xml b/components/camel-swagger-java/pom.xml index 742a9e5..33072cf 100644 --- a/components/camel-swagger-java/pom.xml +++ b/components/camel-swagger-java/pom.xml @@ -114,6 +114,11 @@ <scope>test</scope> </dependency> <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-netty4-http</artifactId> + <scope>test</scope> + </dependency> + <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <scope>test</scope> http://git-wip-us.apache.org/repos/asf/camel/blob/e82caac4/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/ExchangeRestApiResponseAdapter.java ---------------------------------------------------------------------- diff --git a/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/ExchangeRestApiResponseAdapter.java b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/ExchangeRestApiResponseAdapter.java new file mode 100644 index 0000000..e6e911b --- /dev/null +++ b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/ExchangeRestApiResponseAdapter.java @@ -0,0 +1,45 @@ +/** + * 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 org.apache.camel.Exchange; + +public class ExchangeRestApiResponseAdapter implements RestApiResponseAdapter { + + private final Exchange exchange; + + public ExchangeRestApiResponseAdapter(Exchange exchange) { + this.exchange = exchange; + } + + @Override + public void addHeader(String name, String value) { + exchange.getIn().setHeader(name, value); + } + + @Override + public void writeBytes(byte[] bytes) throws IOException { + exchange.getIn().setBody(bytes); + } + + @Override + public void noContent() { + exchange.getIn().setHeader(Exchange.HTTP_RESPONSE_CODE, 204); + } +} http://git-wip-us.apache.org/repos/asf/camel/blob/e82caac4/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestApiResponseAdapter.java ---------------------------------------------------------------------- diff --git a/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestApiResponseAdapter.java b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestApiResponseAdapter.java new file mode 100644 index 0000000..9a64140 --- /dev/null +++ b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestApiResponseAdapter.java @@ -0,0 +1,28 @@ +/** + * 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; + +public interface RestApiResponseAdapter { + + void addHeader(String name, String value); + + void writeBytes(byte[] bytes) throws IOException; + + void noContent(); +} http://git-wip-us.apache.org/repos/asf/camel/blob/e82caac4/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerProcessor.java ---------------------------------------------------------------------- diff --git a/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerProcessor.java b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerProcessor.java index 4b3b9cd..9380d91 100644 --- a/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerProcessor.java +++ b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerProcessor.java @@ -17,32 +17,23 @@ package org.apache.camel.swagger; import java.util.Map; -import java.util.Set; import io.swagger.jaxrs.config.BeanConfig; -import org.apache.camel.CamelContext; -import org.apache.camel.Component; import org.apache.camel.Exchange; -import org.apache.camel.NoSuchBeanException; import org.apache.camel.Processor; -import org.apache.camel.spi.RestApiResponseAdapter; -import org.apache.camel.spi.RestApiResponseAdapterFactory; -import org.apache.camel.support.ServiceSupport; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class RestSwaggerProcessor extends ServiceSupport implements Processor { +public class RestSwaggerProcessor implements Processor { private static final Logger LOG = LoggerFactory.getLogger(RestSwaggerProcessor.class); private final BeanConfig swaggerConfig; private final RestSwaggerSupport support; - private final String componentName; public RestSwaggerProcessor(Map<String, Object> parameters) { support = new RestSwaggerSupport(); swaggerConfig = new BeanConfig(); support.initSwagger(swaggerConfig, parameters); - componentName = (String) parameters.get("componentName"); } @Override @@ -51,9 +42,9 @@ public class RestSwaggerProcessor extends ServiceSupport implements Processor { String contextId; String route = exchange.getIn().getHeader(Exchange.HTTP_PATH, String.class); - try { - RestApiResponseAdapter adapter = lookupAdapter(exchange); + RestApiResponseAdapter adapter = new ExchangeRestApiResponseAdapter(exchange); + try { // render list of camel contexts as root if (route == null || route.equals("") || route.equals("/")) { support.renderCamelContexts(adapter); @@ -75,65 +66,4 @@ public class RestSwaggerProcessor extends ServiceSupport implements Processor { } } - protected RestApiResponseAdapter lookupAdapter(Exchange exchange) { - CamelContext camelContext = exchange.getContext(); - - RestApiResponseAdapterFactory factory = null; - - if (componentName != null) { - Object comp = camelContext.getRegistry().lookupByName(componentName); - if (comp != null && comp instanceof RestApiResponseAdapterFactory) { - factory = (RestApiResponseAdapterFactory) comp; - } else { - comp = camelContext.getComponent(componentName); - if (comp != null && comp instanceof RestApiResponseAdapterFactory) { - factory = (RestApiResponseAdapterFactory) comp; - } - } - - if (factory == null) { - if (comp != null) { - throw new IllegalArgumentException("Component " + componentName + " is not a RestApiResponseAdapterFactory"); - } else { - throw new NoSuchBeanException(componentName, RestApiResponseAdapterFactory.class.getName()); - } - } - } - - // try all components - if (factory == null) { - for (String name : camelContext.getComponentNames()) { - Component comp = camelContext.getComponent(name); - if (comp != null && comp instanceof RestApiResponseAdapterFactory) { - factory = (RestApiResponseAdapterFactory) comp; - break; - } - } - } - - // lookup in registry - if (factory == null) { - Set<RestApiResponseAdapterFactory> factories = camelContext.getRegistry().findByType(RestApiResponseAdapterFactory.class); - if (factories != null && factories.size() == 1) { - factory = factories.iterator().next(); - } - } - - if (factory != null) { - return factory.newAdapter(exchange); - } else { - throw new IllegalStateException("Cannot find RestApiResponseAdapterFactory in Registry or as a Component to use"); - } - - } - - @Override - protected void doStart() throws Exception { - // noop - } - - @Override - protected void doStop() throws Exception { - // noop - } } http://git-wip-us.apache.org/repos/asf/camel/blob/e82caac4/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerSupport.java ---------------------------------------------------------------------- diff --git a/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerSupport.java b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerSupport.java index e558ee3..5790651 100644 --- a/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerSupport.java +++ b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerSupport.java @@ -32,11 +32,11 @@ import io.swagger.models.Contact; import io.swagger.models.Info; import io.swagger.models.License; import io.swagger.models.Swagger; +import org.apache.camel.Exchange; import org.apache.camel.impl.DefaultClassResolver; import org.apache.camel.model.ModelHelper; import org.apache.camel.model.rest.RestDefinition; import org.apache.camel.model.rest.RestsDefinition; -import org.apache.camel.spi.RestApiResponseAdapter; import org.apache.camel.util.CamelVersionHelper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -183,6 +183,10 @@ public class RestSwaggerSupport { mapper.enable(SerializationFeature.INDENT_OUTPUT); mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); byte[] bytes = mapper.writeValueAsBytes(swagger); + + int len = bytes.length; + response.addHeader(Exchange.CONTENT_LENGTH, "" + len); + response.writeBytes(bytes); } else { response.noContent(); @@ -201,16 +205,25 @@ public class RestSwaggerSupport { response.addHeader("Access-Control-Allow-Origin", "*"); } + response.addHeader(Exchange.CONTENT_TYPE, "application/json"); + + StringBuffer sb = new StringBuffer(); + List<String> contexts = findCamelContexts(); - response.writeBytes("[\n".getBytes()); + sb.append("[\n"); for (int i = 0; i < contexts.size(); i++) { String name = contexts.get(i); - response.writeBytes(("{\"name\": \"" + name + "\"}").getBytes()); + sb.append("{\"name\": \"").append(name).append("\"}"); if (i < contexts.size() - 1) { - response.writeBytes(",\n".getBytes()); + sb.append(",\n"); } } - response.writeBytes("\n]".getBytes()); + sb.append("\n]"); + + int len = sb.length(); + response.addHeader(Exchange.CONTENT_LENGTH, "" + len); + + response.writeBytes(sb.toString().getBytes()); } } http://git-wip-us.apache.org/repos/asf/camel/blob/e82caac4/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/servlet/RestSwaggerServlet.java ---------------------------------------------------------------------- diff --git a/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/servlet/RestSwaggerServlet.java b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/servlet/RestSwaggerServlet.java index 3159776..a5ca00a 100644 --- a/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/servlet/RestSwaggerServlet.java +++ b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/servlet/RestSwaggerServlet.java @@ -29,7 +29,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import io.swagger.jaxrs.config.BeanConfig; -import org.apache.camel.spi.RestApiResponseAdapter; +import org.apache.camel.swagger.RestApiResponseAdapter; import org.apache.camel.swagger.RestSwaggerSupport; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -68,11 +68,11 @@ public class RestSwaggerServlet extends HttpServlet { initBaseAndApiPaths(request); } - RestApiResponseAdapter adapter = new ServletRestApiResponseAdapter(response); - String contextId; String route = request.getPathInfo(); + RestApiResponseAdapter adapter = new ServletRestApiResponseAdapter(response); + try { // render list of camel contexts as root http://git-wip-us.apache.org/repos/asf/camel/blob/e82caac4/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/servlet/ServletRestApiResponseAdapter.java ---------------------------------------------------------------------- diff --git a/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/servlet/ServletRestApiResponseAdapter.java b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/servlet/ServletRestApiResponseAdapter.java index bae3aec..5c022c3 100644 --- a/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/servlet/ServletRestApiResponseAdapter.java +++ b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/servlet/ServletRestApiResponseAdapter.java @@ -19,7 +19,7 @@ package org.apache.camel.swagger.servlet; import java.io.IOException; import javax.servlet.http.HttpServletResponse; -import org.apache.camel.spi.RestApiResponseAdapter; +import org.apache.camel.swagger.RestApiResponseAdapter; public class ServletRestApiResponseAdapter implements RestApiResponseAdapter { http://git-wip-us.apache.org/repos/asf/camel/blob/e82caac4/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestApiNettyTest.java ---------------------------------------------------------------------- diff --git a/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestApiNettyTest.java b/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestApiNettyTest.java new file mode 100644 index 0000000..6379515 --- /dev/null +++ b/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestApiNettyTest.java @@ -0,0 +1,65 @@ +/** + * 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 org.apache.camel.builder.RouteBuilder; +import org.apache.camel.impl.JndiRegistry; +import org.apache.camel.model.rest.RestParamType; +import org.apache.camel.test.junit4.CamelTestSupport; +import org.junit.Test; + +public class RestApiNettyTest extends CamelTestSupport { + + @Override + protected JndiRegistry createRegistry() throws Exception { + JndiRegistry jndi = super.createRegistry(); + jndi.bind("SwaggerRestApiProcessorFactory", new SwaggerRestApiProcessorFactory()); + return jndi; + } + + @Override + protected boolean useJmx() { + return true; + } + + @Test + public void testApi() throws Exception { + Thread.sleep(999999); + } + + @Override + protected RouteBuilder createRouteBuilder() throws Exception { + return new RouteBuilder() { + @Override + public void configure() throws Exception { + restConfiguration().component("netty4-http").host("localhost").port(8080).apiContextPath("/api-doc"); + + rest("/hello").consumes("application/json").produces("application/json") + .get("/hi/{name}").description("Saying hi") + .param().name("name").type(RestParamType.path).dataType("string").description("Who is it").endParam() + .to("log:hi") + .get("/bye/{name}").description("Saying bye") + .param().name("name").type(RestParamType.path).dataType("string").description("Who is it").endParam() + .responseMessage().code(200).message("A reply message").endResponseMessage() + .to("log:bye") + .post("/bye").description("To update the greeting message").consumes("application/xml").produces("application/xml") + .param().name("greeting").type(RestParamType.body).dataType("string").description("Message to use as greeting").endParam() + .to("log:bye"); + } + }; + } +}