You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@camel.apache.org by Claus Ibsen <cl...@gmail.com> on 2014/07/28 17:33:14 UTC
Re: git commit: CAMEL-7642 Netty consumer should return error on
invalid request
Hi
Just a note, that a System.out.println slipped into the commit.
On Mon, Jul 28, 2014 at 5:14 PM, <ni...@apache.org> wrote:
> Repository: camel
> Updated Branches:
> refs/heads/camel-2.12.x 30d9b4361 -> b4cb381c7
>
>
> CAMEL-7642 Netty consumer should return error on invalid request
>
>
> Project: http://git-wip-us.apache.org/repos/asf/camel/repo
> Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/b4cb381c
> Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/b4cb381c
> Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/b4cb381c
>
> Branch: refs/heads/camel-2.12.x
> Commit: b4cb381c7ed5343cde23aaa6fcc729f149c4fbd8
> Parents: 30d9b43
> Author: Willem Jiang <wi...@gmail.com>
> Authored: Mon Jul 28 23:11:09 2014 +0800
> Committer: Willem Jiang <wi...@gmail.com>
> Committed: Mon Jul 28 23:13:50 2014 +0800
>
> ----------------------------------------------------------------------
> .../http/handlers/HttpServerChannelHandler.java | 1 +
> .../HttpServerMultiplexChannelHandler.java | 10 +-
> .../NettyHttpGetWithInvalidMessageTest.java | 104 +++++++++++++++++++
> .../netty/handlers/ClientChannelHandler.java | 1 +
> 4 files changed, 115 insertions(+), 1 deletion(-)
> ----------------------------------------------------------------------
>
>
> http://git-wip-us.apache.org/repos/asf/camel/blob/b4cb381c/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/handlers/HttpServerChannelHandler.java
> ----------------------------------------------------------------------
> diff --git a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/handlers/HttpServerChannelHandler.java b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/handlers/HttpServerChannelHandler.java
> index 6cf4b7f..d4ff8dc 100644
> --- a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/handlers/HttpServerChannelHandler.java
> +++ b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/handlers/HttpServerChannelHandler.java
> @@ -267,6 +267,7 @@ public class HttpServerChannelHandler extends ServerChannelHandler {
>
> @Override
> public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent exceptionEvent) throws Exception {
> + System.out.println("Get the exception here" + exceptionEvent);
> // only close if we are still allowed to run
> if (consumer.isRunAllowed()) {
>
>
> http://git-wip-us.apache.org/repos/asf/camel/blob/b4cb381c/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/handlers/HttpServerMultiplexChannelHandler.java
> ----------------------------------------------------------------------
> diff --git a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/handlers/HttpServerMultiplexChannelHandler.java b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/handlers/HttpServerMultiplexChannelHandler.java
> index e00abd4..3c219f6 100644
> --- a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/handlers/HttpServerMultiplexChannelHandler.java
> +++ b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/handlers/HttpServerMultiplexChannelHandler.java
> @@ -117,7 +117,15 @@ public class HttpServerMultiplexChannelHandler extends SimpleChannelUpstreamHand
> if (handler != null) {
> handler.exceptionCaught(ctx, e);
> } else {
> - throw new IllegalStateException("HttpServerChannelHandler not found as attachment. Cannot handle caught exception.", e.getCause());
> + // we cannot throw the exception here
> + LOG.warn("HttpServerChannelHandler is not found as attachment for exception {}, send 404 back to the client.", e.getCause());
> + // Now we just send 404 back to the client
> + HttpResponse response = new DefaultHttpResponse(HTTP_1_1, NOT_FOUND);
> + response.headers().set(Exchange.CONTENT_TYPE, "text/plain");
> + response.headers().set(Exchange.CONTENT_LENGTH, 0);
> + // Here we don't want to expose the exception detail to the client
> + response.setContent(ChannelBuffers.copiedBuffer(new byte[]{}));
> + ctx.getChannel().write(response);
> }
> }
>
>
> http://git-wip-us.apache.org/repos/asf/camel/blob/b4cb381c/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpGetWithInvalidMessageTest.java
> ----------------------------------------------------------------------
> diff --git a/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpGetWithInvalidMessageTest.java b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpGetWithInvalidMessageTest.java
> new file mode 100644
> index 0000000..5e6a46b
> --- /dev/null
> +++ b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpGetWithInvalidMessageTest.java
> @@ -0,0 +1,104 @@
> +/**
> + * 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.netty.http;
> +
> +import java.util.ArrayList;
> +import java.util.List;
> +
> +import org.apache.camel.Exchange;
> +import org.apache.camel.Processor;
> +import org.apache.camel.builder.RouteBuilder;
> +import org.apache.camel.impl.JndiRegistry;
> +import org.apache.camel.test.AvailablePortFinder;
> +import org.apache.camel.test.junit4.CamelTestSupport;
> +import org.jboss.netty.channel.ChannelHandler;
> +import org.jboss.netty.handler.codec.string.StringDecoder;
> +import org.jboss.netty.handler.codec.string.StringEncoder;
> +import org.junit.Test;
> +
> +public class NettyHttpGetWithInvalidMessageTest extends CamelTestSupport {
> + private static final String REQUEST_STRING = "user: Willem\n"
> + + "GET http://localhost:8101/test HTTP/1.1\n" + "another: value\n Host: localhost\n";
> + private int port1;
> +
> + @Override
> + protected JndiRegistry createRegistry() throws Exception {
> + JndiRegistry registry = super.createRegistry();
> +
> + // setup the String encoder and decoder
> +
> + StringDecoder stringDecoder = new StringDecoder();
> + registry.bind("string-decoder", stringDecoder);
> +
> + StringEncoder stringEncoder = new StringEncoder();
> + registry.bind("string-encoder", stringEncoder);
> +
> + List<ChannelHandler> decoders = new ArrayList<ChannelHandler>();
> + decoders.add(stringDecoder);
> +
> + List<ChannelHandler> encoders = new ArrayList<ChannelHandler>();
> + encoders.add(stringEncoder);
> +
> + registry.bind("encoders", encoders);
> + registry.bind("decoders", decoders);
> +
> + return registry;
> + }
> +
> + @Test
> + public void testNettyHttpServer() throws Exception {
> + invokeService(8100);
> + }
> +
> + //@Test
> + public void testJettyHttpServer() throws Exception {
> + invokeService(port1);
> + }
> +
> + private void invokeService(int port) {
> + Exchange out = template.request("netty:tcp://localhost:" + port + "?encoders=#encoders&decoders=#decoders&sync=true" , new Processor() {
> + @Override
> + public void process(Exchange exchange) throws Exception {
> + exchange.getIn().setBody(REQUEST_STRING);
> + }
> + });
> +
> + assertNotNull(out);
> + String result = out.getOut().getBody(String.class);
> + assertNotNull(result);
> + assertTrue("We should get the 404 response.", result.indexOf("404 Not Found") > 0);
> +
> + }
> +
> +
> +
> + @Override
> + protected RouteBuilder createRouteBuilder() throws Exception {
> + return new RouteBuilder() {
> + @Override
> + public void configure() throws Exception {
> + port1 = AvailablePortFinder.getNextAvailable(8100);
> +
> + // set up a netty http proxy
> + from("netty-http:http://localhost:" + port1 + "/test")
> + .transform().simple("Bye ${header.user}.");
> +
> + }
> + };
> + }
> +
> +}
>
> http://git-wip-us.apache.org/repos/asf/camel/blob/b4cb381c/components/camel-netty/src/main/java/org/apache/camel/component/netty/handlers/ClientChannelHandler.java
> ----------------------------------------------------------------------
> diff --git a/components/camel-netty/src/main/java/org/apache/camel/component/netty/handlers/ClientChannelHandler.java b/components/camel-netty/src/main/java/org/apache/camel/component/netty/handlers/ClientChannelHandler.java
> index e0ddb9f..f21391e 100644
> --- a/components/camel-netty/src/main/java/org/apache/camel/component/netty/handlers/ClientChannelHandler.java
> +++ b/components/camel-netty/src/main/java/org/apache/camel/component/netty/handlers/ClientChannelHandler.java
> @@ -209,6 +209,7 @@ public class ClientChannelHandler extends SimpleChannelUpstreamHandler {
>
> // if textline enabled then covert to a String which must be used for textline
> if (producer.getConfiguration().isTextline()) {
> + System.out.println("body is " + body);
> body = producer.getContext().getTypeConverter().mandatoryConvertTo(String.class, exchange, body);
> }
>
>
--
Claus Ibsen
-----------------
Red Hat, Inc.
Email: cibsen@redhat.com
Twitter: davsclaus
Blog: http://davsclaus.com
Author of Camel in Action: http://www.manning.com/ibsen
hawtio: http://hawt.io/
fabric8: http://fabric8.io/
Re: git commit: CAMEL-7642 Netty consumer should return error
on invalid request
Posted by Willem Jiang <wi...@gmail.com>.
Hi Claus,
Thanks for pointing that out, I just committed a quick fix for it.
--
Willem Jiang
Red Hat, Inc.
Web: http://www.redhat.com
Blog: http://willemjiang.blogspot.com (English)
http://jnn.iteye.com (Chinese)
Twitter: willemjiang
Weibo: 姜宁willem
On July 28, 2014 at 11:34:01 PM, Claus Ibsen (claus.ibsen@gmail.com) wrote:
> Hi
>
> Just a note, that a System.out.println slipped into the commit.
>
> On Mon, Jul 28, 2014 at 5:14 PM, wrote:
> > Repository: camel
> > Updated Branches:
> > refs/heads/camel-2.12.x 30d9b4361 -> b4cb381c7
> >
> >
> > CAMEL-7642 Netty consumer should return error on invalid request
> >
> >
> > Project: http://git-wip-us.apache.org/repos/asf/camel/repo
> > Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/b4cb381c
> > Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/b4cb381c
> > Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/b4cb381c
> >
> > Branch: refs/heads/camel-2.12.x
> > Commit: b4cb381c7ed5343cde23aaa6fcc729f149c4fbd8
> > Parents: 30d9b43
> > Author: Willem Jiang
> > Authored: Mon Jul 28 23:11:09 2014 +0800
> > Committer: Willem Jiang
> > Committed: Mon Jul 28 23:13:50 2014 +0800
> >
> > ----------------------------------------------------------------------
> > .../http/handlers/HttpServerChannelHandler.java | 1 +
> > .../HttpServerMultiplexChannelHandler.java | 10 +-
> > .../NettyHttpGetWithInvalidMessageTest.java | 104 +++++++++++++++++++
> > .../netty/handlers/ClientChannelHandler.java | 1 +
> > 4 files changed, 115 insertions(+), 1 deletion(-)
> > ----------------------------------------------------------------------
> >
> >
> > http://git-wip-us.apache.org/repos/asf/camel/blob/b4cb381c/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/handlers/HttpServerChannelHandler.java
> > ----------------------------------------------------------------------
> > diff --git a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/handlers/HttpServerChannelHandler.java
> b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/handlers/HttpServerChannelHandler.java
> > index 6cf4b7f..d4ff8dc 100644
> > --- a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/handlers/HttpServerChannelHandler.java
> > +++ b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/handlers/HttpServerChannelHandler.java
> > @@ -267,6 +267,7 @@ public class HttpServerChannelHandler extends ServerChannelHandler
> {
> >
> > @Override
> > public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent exceptionEvent)
> throws Exception {
> > + System.out.println("Get the exception here" + exceptionEvent);
> > // only close if we are still allowed to run
> > if (consumer.isRunAllowed()) {
> >
> >
> > http://git-wip-us.apache.org/repos/asf/camel/blob/b4cb381c/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/handlers/HttpServerMultiplexChannelHandler.java
> > ----------------------------------------------------------------------
> > diff --git a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/handlers/HttpServerMultiplexChannelHandler.java
> b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/handlers/HttpServerMultiplexChannelHandler.java
> > index e00abd4..3c219f6 100644
> > --- a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/handlers/HttpServerMultiplexChannelHandler.java
> > +++ b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/handlers/HttpServerMultiplexChannelHandler.java
> > @@ -117,7 +117,15 @@ public class HttpServerMultiplexChannelHandler extends SimpleChannelUpstreamHand
> > if (handler != null) {
> > handler.exceptionCaught(ctx, e);
> > } else {
> > - throw new IllegalStateException("HttpServerChannelHandler not found as attachment.
> Cannot handle caught exception.", e.getCause());
> > + // we cannot throw the exception here
> > + LOG.warn("HttpServerChannelHandler is not found as attachment for exception {},
> send 404 back to the client.", e.getCause());
> > + // Now we just send 404 back to the client
> > + HttpResponse response = new DefaultHttpResponse(HTTP_1_1, NOT_FOUND);
> > + response.headers().set(Exchange.CONTENT_TYPE, "text/plain");
> > + response.headers().set(Exchange.CONTENT_LENGTH, 0);
> > + // Here we don't want to expose the exception detail to the client
> > + response.setContent(ChannelBuffers.copiedBuffer(new byte[]{}));
> > + ctx.getChannel().write(response);
> > }
> > }
> >
> >
> > http://git-wip-us.apache.org/repos/asf/camel/blob/b4cb381c/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpGetWithInvalidMessageTest.java
> > ----------------------------------------------------------------------
> > diff --git a/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpGetWithInvalidMessageTest.java
> b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpGetWithInvalidMessageTest.java
> > new file mode 100644
> > index 0000000..5e6a46b
> > --- /dev/null
> > +++ b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpGetWithInvalidMessageTest.java
> > @@ -0,0 +1,104 @@
> > +/**
> > + * 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.netty.http;
> > +
> > +import java.util.ArrayList;
> > +import java.util.List;
> > +
> > +import org.apache.camel.Exchange;
> > +import org.apache.camel.Processor;
> > +import org.apache.camel.builder.RouteBuilder;
> > +import org.apache.camel.impl.JndiRegistry;
> > +import org.apache.camel.test.AvailablePortFinder;
> > +import org.apache.camel.test.junit4.CamelTestSupport;
> > +import org.jboss.netty.channel.ChannelHandler;
> > +import org.jboss.netty.handler.codec.string.StringDecoder;
> > +import org.jboss.netty.handler.codec.string.StringEncoder;
> > +import org.junit.Test;
> > +
> > +public class NettyHttpGetWithInvalidMessageTest extends CamelTestSupport {
> > + private static final String REQUEST_STRING = "user: Willem\n"
> > + + "GET http://localhost:8101/test HTTP/1.1\n" + "another: value\n Host: localhost\n";
> > + private int port1;
> > +
> > + @Override
> > + protected JndiRegistry createRegistry() throws Exception {
> > + JndiRegistry registry = super.createRegistry();
> > +
> > + // setup the String encoder and decoder
> > +
> > + StringDecoder stringDecoder = new StringDecoder();
> > + registry.bind("string-decoder", stringDecoder);
> > +
> > + StringEncoder stringEncoder = new StringEncoder();
> > + registry.bind("string-encoder", stringEncoder);
> > +
> > + List decoders = new ArrayList();
> > + decoders.add(stringDecoder);
> > +
> > + List encoders = new ArrayList();
> > + encoders.add(stringEncoder);
> > +
> > + registry.bind("encoders", encoders);
> > + registry.bind("decoders", decoders);
> > +
> > + return registry;
> > + }
> > +
> > + @Test
> > + public void testNettyHttpServer() throws Exception {
> > + invokeService(8100);
> > + }
> > +
> > + //@Test
> > + public void testJettyHttpServer() throws Exception {
> > + invokeService(port1);
> > + }
> > +
> > + private void invokeService(int port) {
> > + Exchange out = template.request("netty:tcp://localhost:" + port + "?encoders=#encoders&decoders=#decoders&sync=true"
> , new Processor() {
> > + @Override
> > + public void process(Exchange exchange) throws Exception {
> > + exchange.getIn().setBody(REQUEST_STRING);
> > + }
> > + });
> > +
> > + assertNotNull(out);
> > + String result = out.getOut().getBody(String.class);
> > + assertNotNull(result);
> > + assertTrue("We should get the 404 response.", result.indexOf("404 Not Found")
> > 0);
> > +
> > + }
> > +
> > +
> > +
> > + @Override
> > + protected RouteBuilder createRouteBuilder() throws Exception {
> > + return new RouteBuilder() {
> > + @Override
> > + public void configure() throws Exception {
> > + port1 = AvailablePortFinder.getNextAvailable(8100);
> > +
> > + // set up a netty http proxy
> > + from("netty-http:http://localhost:" + port1 + "/test")
> > + .transform().simple("Bye ${header.user}.");
> > +
> > + }
> > + };
> > + }
> > +
> > +}
> >
> > http://git-wip-us.apache.org/repos/asf/camel/blob/b4cb381c/components/camel-netty/src/main/java/org/apache/camel/component/netty/handlers/ClientChannelHandler.java
> > ----------------------------------------------------------------------
> > diff --git a/components/camel-netty/src/main/java/org/apache/camel/component/netty/handlers/ClientChannelHandler.java
> b/components/camel-netty/src/main/java/org/apache/camel/component/netty/handlers/ClientChannelHandler.java
> > index e0ddb9f..f21391e 100644
> > --- a/components/camel-netty/src/main/java/org/apache/camel/component/netty/handlers/ClientChannelHandler.java
> > +++ b/components/camel-netty/src/main/java/org/apache/camel/component/netty/handlers/ClientChannelHandler.java
> > @@ -209,6 +209,7 @@ public class ClientChannelHandler extends SimpleChannelUpstreamHandler
> {
> >
> > // if textline enabled then covert to a String which must be used for textline
> > if (producer.getConfiguration().isTextline()) {
> > + System.out.println("body is " + body);
> > body = producer.getContext().getTypeConverter().mandatoryConvertTo(String.class,
> exchange, body);
> > }
> >
> >
>
>
>
> --
> Claus Ibsen
> -----------------
> Red Hat, Inc.
> Email: cibsen@redhat.com
> Twitter: davsclaus
> Blog: http://davsclaus.com
> Author of Camel in Action: http://www.manning.com/ibsen
> hawtio: http://hawt.io/
> fabric8: http://fabric8.io/
>