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()); } /**