diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocket00FrameDecoder.java b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocket00FrameDecoder.java index 37d8c014d5..74b9f2eddd 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocket00FrameDecoder.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocket00FrameDecoder.java @@ -20,7 +20,7 @@ import io.netty.channel.Channel; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.ReplayingDecoder; import io.netty.handler.codec.TooLongFrameException; -import io.netty.handler.codec.VoidEnum; +import io.netty.util.VoidEnum; /** * Decodes {@link ChannelBuffer}s into {@link WebSocketFrame}s. diff --git a/codec/src/main/java/io/netty/handler/codec/MessageToMessageDecoder.java b/codec/src/main/java/io/netty/handler/codec/MessageToMessageDecoder.java index f09122ed68..be0d2a23d7 100644 --- a/codec/src/main/java/io/netty/handler/codec/MessageToMessageDecoder.java +++ b/codec/src/main/java/io/netty/handler/codec/MessageToMessageDecoder.java @@ -30,9 +30,9 @@ public abstract class MessageToMessageDecoder extends ChannelInboundHandle O emsg = decode(ctx, msg); if (emsg == null) { - throw new IllegalArgumentException( - "decode() returned null. unsupported message type? " + - msg.getClass().getName()); + // Decoder consumed a message but returned null. + // Probably it needs more messages. + continue; } if (unfoldAndAdd(ctx, ctx.nextIn(), emsg)) { diff --git a/codec/src/main/java/io/netty/handler/codec/ReplayingDecoder.java b/codec/src/main/java/io/netty/handler/codec/ReplayingDecoder.java index d393f0d24b..c8ea7fc1d8 100644 --- a/codec/src/main/java/io/netty/handler/codec/ReplayingDecoder.java +++ b/codec/src/main/java/io/netty/handler/codec/ReplayingDecoder.java @@ -26,6 +26,7 @@ import io.netty.channel.ChannelInboundHandlerAdapter; import io.netty.channel.ChannelInboundHandlerContext; import io.netty.channel.ChannelPipeline; import io.netty.util.Signal; +import io.netty.util.VoidEnum; /** * A specialized variation of {@link StreamToMessageDecoder} which enables implementation diff --git a/codec/src/main/java/io/netty/handler/codec/redis/RedisDecoder.java b/codec/src/main/java/io/netty/handler/codec/redis/RedisDecoder.java index 0bafe413b6..cfeb718455 100644 --- a/codec/src/main/java/io/netty/handler/codec/redis/RedisDecoder.java +++ b/codec/src/main/java/io/netty/handler/codec/redis/RedisDecoder.java @@ -19,7 +19,7 @@ import io.netty.buffer.ChannelBuffer; import io.netty.buffer.ChannelBufferIndexFinder; import io.netty.channel.ChannelInboundHandlerContext; import io.netty.handler.codec.ReplayingDecoder; -import io.netty.handler.codec.VoidEnum; +import io.netty.util.VoidEnum; import java.io.IOException; diff --git a/codec/src/test/java/io/netty/handler/codec/ReplayingDecoderTest.java b/codec/src/test/java/io/netty/handler/codec/ReplayingDecoderTest.java index 441e7ffc41..5437ceab51 100644 --- a/codec/src/test/java/io/netty/handler/codec/ReplayingDecoderTest.java +++ b/codec/src/test/java/io/netty/handler/codec/ReplayingDecoderTest.java @@ -21,6 +21,7 @@ import io.netty.buffer.ChannelBufferIndexFinder; import io.netty.buffer.ChannelBuffers; import io.netty.channel.ChannelInboundHandlerContext; import io.netty.handler.codec.embedder.DecoderEmbedder; +import io.netty.util.VoidEnum; import org.junit.Test; diff --git a/codec/src/main/java/io/netty/handler/codec/VoidEnum.java b/common/src/main/java/io/netty/util/VoidEnum.java similarity index 76% rename from codec/src/main/java/io/netty/handler/codec/VoidEnum.java rename to common/src/main/java/io/netty/util/VoidEnum.java index fa620f13c4..eb434c3d53 100644 --- a/codec/src/main/java/io/netty/handler/codec/VoidEnum.java +++ b/common/src/main/java/io/netty/util/VoidEnum.java @@ -13,12 +13,11 @@ * License for the specific language governing permissions and limitations * under the License. */ -package io.netty.handler.codec; +package io.netty.util; + /** - * A placeholder {@link Enum} which could be specified as a type parameter of - * {@link ReplayingDecoder} when a user wants to manage the decoder state or - * there's no state to manage. + * A place holder {@link Enum} which has no constant. */ public enum VoidEnum { // No state is defined.