From acde9a3f8e520e2fb02e33602dac4e5af5df532c Mon Sep 17 00:00:00 2001 From: Norman Maurer Date: Mon, 11 Mar 2013 14:39:18 +0100 Subject: [PATCH] Fix a NoSuchElementException when WebSocketClientHandshaker is used with HttpRequestEncoder. This time for real --- .../http/websocketx/WebSocketClientHandshaker.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketClientHandshaker.java b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketClientHandshaker.java index 471517c5ba..4dc8f3c4b2 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketClientHandshaker.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketClientHandshaker.java @@ -205,15 +205,21 @@ public abstract class WebSocketClientHandshaker { setHandshakeComplete(); ChannelPipeline p = channel.pipeline(); - ChannelHandlerContext ctx = p.context(HttpRequestEncoder.class); + ChannelHandlerContext ctx = p.context(HttpResponseDecoder.class); if (ctx == null) { ctx = p.context(HttpClientCodec.class); if (ctx == null) { throw new IllegalStateException("ChannelPipeline does not contain " + "a HttpRequestEncoder or HttpClientCodec"); } + p.replaceAndForward(ctx.name(), "ws-decoder", newWebsocketDecoder()); + } else { + if (p.get(HttpRequestEncoder.class) != null) { + p.remove(HttpRequestEncoder.class); + } + p.replaceAndForward(ctx.name(), + "ws-decoder", newWebsocketDecoder()); } - p.replaceAndForward(ctx.name(), "ws-decoder", newWebsocketDecoder()); } /**