diff --git a/codec/src/main/java/io/netty/handler/codec/embedder/CodecEmbedderException.java b/codec/src/main/java/io/netty/handler/codec/CodecException.java similarity index 63% rename from codec/src/main/java/io/netty/handler/codec/embedder/CodecEmbedderException.java rename to codec/src/main/java/io/netty/handler/codec/CodecException.java index f1d04d5d16..5bb132b062 100644 --- a/codec/src/main/java/io/netty/handler/codec/embedder/CodecEmbedderException.java +++ b/codec/src/main/java/io/netty/handler/codec/CodecException.java @@ -13,41 +13,41 @@ * License for the specific language governing permissions and limitations * under the License. */ -package io.netty.handler.codec.embedder; +package io.netty.handler.codec; /** - * A {@link RuntimeException} which is thrown when a {@link CodecEmbedder} - * failed to encode or decode the specified input. - * @apiviz.exclude + * An {@link Exception} which is thrown by a codec. + * + * @apiviz.hidden */ -public class CodecEmbedderException extends RuntimeException { +public class CodecException extends RuntimeException { - private static final long serialVersionUID = -6283302594160331474L; + private static final long serialVersionUID = -1464830400709348473L; /** * Creates a new instance. */ - public CodecEmbedderException() { + public CodecException() { } /** * Creates a new instance. */ - public CodecEmbedderException(String message, Throwable cause) { + public CodecException(String message, Throwable cause) { super(message, cause); } /** * Creates a new instance. */ - public CodecEmbedderException(String message) { + public CodecException(String message) { super(message); } /** * Creates a new instance. */ - public CodecEmbedderException(Throwable cause) { + public CodecException(Throwable cause) { super(cause); } } diff --git a/codec/src/main/java/io/netty/handler/codec/CorruptedFrameException.java b/codec/src/main/java/io/netty/handler/codec/CorruptedFrameException.java index 38326d949f..d26d7ec877 100644 --- a/codec/src/main/java/io/netty/handler/codec/CorruptedFrameException.java +++ b/codec/src/main/java/io/netty/handler/codec/CorruptedFrameException.java @@ -21,7 +21,7 @@ package io.netty.handler.codec; * * @apiviz.hidden */ -public class CorruptedFrameException extends Exception { +public class CorruptedFrameException extends DecoderException { private static final long serialVersionUID = 3918052232492988408L; diff --git a/codec/src/main/java/io/netty/handler/codec/DecoderException.java b/codec/src/main/java/io/netty/handler/codec/DecoderException.java new file mode 100644 index 0000000000..b3fff9ed43 --- /dev/null +++ b/codec/src/main/java/io/netty/handler/codec/DecoderException.java @@ -0,0 +1,53 @@ +/* + * Copyright 2011 The Netty Project + * + * The Netty Project 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 io.netty.handler.codec; + +/** + * An {@link Exception} which is thrown by an encoder. + * + * @apiviz.hidden + */ +public class DecoderException extends CodecException { + + private static final long serialVersionUID = 6926716840699621852L; + + /** + * Creates a new instance. + */ + public DecoderException() { + } + + /** + * Creates a new instance. + */ + public DecoderException(String message, Throwable cause) { + super(message, cause); + } + + /** + * Creates a new instance. + */ + public DecoderException(String message) { + super(message); + } + + /** + * Creates a new instance. + */ + public DecoderException(Throwable cause) { + super(cause); + } +} diff --git a/codec/src/main/java/io/netty/handler/codec/EncoderException.java b/codec/src/main/java/io/netty/handler/codec/EncoderException.java new file mode 100644 index 0000000000..ec1e61e2d4 --- /dev/null +++ b/codec/src/main/java/io/netty/handler/codec/EncoderException.java @@ -0,0 +1,53 @@ +/* + * Copyright 2011 The Netty Project + * + * The Netty Project 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 io.netty.handler.codec; + +/** + * An {@link Exception} which is thrown by an encoder. + * + * @apiviz.hidden + */ +public class EncoderException extends CodecException { + + private static final long serialVersionUID = -5086121160476476774L; + + /** + * Creates a new instance. + */ + public EncoderException() { + } + + /** + * Creates a new instance. + */ + public EncoderException(String message, Throwable cause) { + super(message, cause); + } + + /** + * Creates a new instance. + */ + public EncoderException(String message) { + super(message); + } + + /** + * Creates a new instance. + */ + public EncoderException(Throwable cause) { + super(cause); + } +} 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 be0d2a23d7..3adee94d8e 100644 --- a/codec/src/main/java/io/netty/handler/codec/MessageToMessageDecoder.java +++ b/codec/src/main/java/io/netty/handler/codec/MessageToMessageDecoder.java @@ -39,7 +39,11 @@ public abstract class MessageToMessageDecoder extends ChannelInboundHandle decoded = true; } } catch (Throwable t) { - ctx.fireExceptionCaught(t); + if (t instanceof CodecException) { + ctx.fireExceptionCaught(t); + } else { + ctx.fireExceptionCaught(new DecoderException(t)); + } } } if (decoded) { diff --git a/codec/src/main/java/io/netty/handler/codec/MessageToMessageEncoder.java b/codec/src/main/java/io/netty/handler/codec/MessageToMessageEncoder.java index 0554a88733..4056d072cf 100644 --- a/codec/src/main/java/io/netty/handler/codec/MessageToMessageEncoder.java +++ b/codec/src/main/java/io/netty/handler/codec/MessageToMessageEncoder.java @@ -40,7 +40,11 @@ public abstract class MessageToMessageEncoder extends ChannelOutboundHandl encoded = true; } } catch (Throwable t) { - ctx.fireExceptionCaught(t); + if (t instanceof CodecException) { + ctx.fireExceptionCaught(t); + } else { + ctx.fireExceptionCaught(new EncoderException(t)); + } } } diff --git a/codec/src/main/java/io/netty/handler/codec/MessageToStreamEncoder.java b/codec/src/main/java/io/netty/handler/codec/MessageToStreamEncoder.java index 5d1b2503cd..31a19cb538 100644 --- a/codec/src/main/java/io/netty/handler/codec/MessageToStreamEncoder.java +++ b/codec/src/main/java/io/netty/handler/codec/MessageToStreamEncoder.java @@ -32,7 +32,11 @@ public abstract class MessageToStreamEncoder extends ChannelOutboundHandlerAd try { encode(ctx, msg, out); } catch (Throwable t) { - ctx.fireExceptionCaught(t); + if (t instanceof CodecException) { + ctx.fireExceptionCaught(t); + } else { + ctx.fireExceptionCaught(new EncoderException(t)); + } } } 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 c8ea7fc1d8..04c4972297 100644 --- a/codec/src/main/java/io/netty/handler/codec/ReplayingDecoder.java +++ b/codec/src/main/java/io/netty/handler/codec/ReplayingDecoder.java @@ -373,7 +373,11 @@ public abstract class ReplayingDecoder> extends ChannelInbo // Ignore replay.expect(REPLAY); } catch (Throwable t) { - ctx.fireExceptionCaught(t); + if (t instanceof CodecException) { + ctx.fireExceptionCaught(t); + } else { + ctx.fireExceptionCaught(new DecoderException(t)); + } } ctx.fireChannelInactive(); @@ -426,7 +430,11 @@ public abstract class ReplayingDecoder> extends ChannelInbo // A successful decode MessageToMessageEncoder.unfoldAndAdd(ctx, ctx.nextIn(), result); } catch (Throwable t) { - ctx.fireExceptionCaught(t); + if (t instanceof CodecException) { + ctx.fireExceptionCaught(t); + } else { + ctx.fireExceptionCaught(new DecoderException(t)); + } } } } diff --git a/codec/src/main/java/io/netty/handler/codec/StreamToMessageDecoder.java b/codec/src/main/java/io/netty/handler/codec/StreamToMessageDecoder.java index 2e51d26717..afbf9a8f73 100644 --- a/codec/src/main/java/io/netty/handler/codec/StreamToMessageDecoder.java +++ b/codec/src/main/java/io/netty/handler/codec/StreamToMessageDecoder.java @@ -33,7 +33,11 @@ public abstract class StreamToMessageDecoder extends ChannelInboundHandlerAda ctx.fireInboundBufferUpdated(); } } catch (Throwable t) { - ctx.fireExceptionCaught(t); + if (t instanceof CodecException) { + ctx.fireExceptionCaught(t); + } else { + ctx.fireExceptionCaught(new DecoderException(t)); + } } ctx.fireChannelInactive(); @@ -66,7 +70,11 @@ public abstract class StreamToMessageDecoder extends ChannelInboundHandlerAda break; } } catch (Throwable t) { - ctx.fireExceptionCaught(t); + if (t instanceof CodecException) { + ctx.fireExceptionCaught(t); + } else { + ctx.fireExceptionCaught(new DecoderException(t)); + } } } diff --git a/codec/src/main/java/io/netty/handler/codec/StreamToStreamDecoder.java b/codec/src/main/java/io/netty/handler/codec/StreamToStreamDecoder.java index 9e2fbf3979..219b9fea5b 100644 --- a/codec/src/main/java/io/netty/handler/codec/StreamToStreamDecoder.java +++ b/codec/src/main/java/io/netty/handler/codec/StreamToStreamDecoder.java @@ -31,7 +31,11 @@ public abstract class StreamToStreamDecoder extends ChannelInboundHandlerAdapter try { decodeLast(ctx, in, out); } catch (Throwable t) { - ctx.fireExceptionCaught(t); + if (t instanceof CodecException) { + ctx.fireExceptionCaught(t); + } else { + ctx.fireExceptionCaught(new DecoderException(t)); + } } if (out.readableBytes() > oldOutSize) { @@ -52,7 +56,11 @@ public abstract class StreamToStreamDecoder extends ChannelInboundHandlerAdapter try { decode(ctx, in, out); } catch (Throwable t) { - ctx.fireExceptionCaught(t); + if (t instanceof CodecException) { + ctx.fireExceptionCaught(t); + } else { + ctx.fireExceptionCaught(new DecoderException(t)); + } } if (oldInSize == in.readableBytes()) { break; diff --git a/codec/src/main/java/io/netty/handler/codec/StreamToStreamEncoder.java b/codec/src/main/java/io/netty/handler/codec/StreamToStreamEncoder.java index 906a314217..38e4987613 100644 --- a/codec/src/main/java/io/netty/handler/codec/StreamToStreamEncoder.java +++ b/codec/src/main/java/io/netty/handler/codec/StreamToStreamEncoder.java @@ -26,7 +26,11 @@ public abstract class StreamToStreamEncoder extends ChannelOutboundHandlerAdapte try { encode(ctx, in, out); } catch (Throwable t) { - ctx.fireExceptionCaught(t); + if (t instanceof CodecException) { + ctx.fireExceptionCaught(t); + } else { + ctx.fireExceptionCaught(new EncoderException(t)); + } } if (oldInSize == in.readableBytes()) { break; diff --git a/codec/src/main/java/io/netty/handler/codec/TooLongFrameException.java b/codec/src/main/java/io/netty/handler/codec/TooLongFrameException.java index 70412aac6f..5629afc2b0 100644 --- a/codec/src/main/java/io/netty/handler/codec/TooLongFrameException.java +++ b/codec/src/main/java/io/netty/handler/codec/TooLongFrameException.java @@ -20,7 +20,7 @@ package io.netty.handler.codec; * decoded by {@link DelimiterBasedFrameDecoder} is greater than the maximum. * @apiviz.hidden */ -public class TooLongFrameException extends Exception { +public class TooLongFrameException extends DecoderException { private static final long serialVersionUID = -1995801950698951640L; diff --git a/codec/src/main/java/io/netty/handler/codec/embedder/AbstractCodecEmbedder.java b/codec/src/main/java/io/netty/handler/codec/embedder/AbstractCodecEmbedder.java index 07db4691e7..0608789da6 100644 --- a/codec/src/main/java/io/netty/handler/codec/embedder/AbstractCodecEmbedder.java +++ b/codec/src/main/java/io/netty/handler/codec/embedder/AbstractCodecEmbedder.java @@ -23,6 +23,7 @@ import io.netty.channel.ChannelInboundHandlerAdapter; import io.netty.channel.ChannelInboundHandlerContext; import io.netty.channel.ChannelPipeline; import io.netty.channel.EventLoop; +import io.netty.handler.codec.CodecException; import java.lang.reflect.Array; import java.util.ConcurrentModificationException; @@ -83,15 +84,17 @@ abstract class AbstractCodecEmbedder implements CodecEmbedder { @SuppressWarnings("unchecked") private E product(Object p) { - if (p instanceof CodecEmbedderException) { - throw (CodecEmbedderException) p; + if (p instanceof CodecException) { + throw (CodecException) p; } if (p instanceof Throwable) { - throw new CodecEmbedderException((Throwable) p); + throw newCodecException((Throwable) p); } return (E) p; } + protected abstract CodecException newCodecException(Throwable t); + @Override public final Object[] pollAll() { final int size = size(); diff --git a/codec/src/main/java/io/netty/handler/codec/embedder/DecoderEmbedder.java b/codec/src/main/java/io/netty/handler/codec/embedder/DecoderEmbedder.java index 30d5814d78..ec4892bfbb 100644 --- a/codec/src/main/java/io/netty/handler/codec/embedder/DecoderEmbedder.java +++ b/codec/src/main/java/io/netty/handler/codec/embedder/DecoderEmbedder.java @@ -20,6 +20,8 @@ import io.netty.buffer.ChannelBuffers; import io.netty.channel.ChannelBufferHolder; import io.netty.channel.ChannelHandler; import io.netty.channel.ChannelPipeline; +import io.netty.handler.codec.CodecException; +import io.netty.handler.codec.DecoderException; import io.netty.handler.codec.base64.Base64Decoder; import io.netty.handler.codec.string.StringDecoder; @@ -65,4 +67,9 @@ public class DecoderEmbedder extends AbstractCodecEmbedder { pipeline().fireInboundBufferUpdated(); return !isEmpty(); } + + @Override + protected CodecException newCodecException(Throwable t) { + return new DecoderException(t); + } } diff --git a/codec/src/main/java/io/netty/handler/codec/embedder/EncoderEmbedder.java b/codec/src/main/java/io/netty/handler/codec/embedder/EncoderEmbedder.java index 8dcc39b701..b10d297b85 100644 --- a/codec/src/main/java/io/netty/handler/codec/embedder/EncoderEmbedder.java +++ b/codec/src/main/java/io/netty/handler/codec/embedder/EncoderEmbedder.java @@ -18,6 +18,8 @@ package io.netty.handler.codec.embedder; import io.netty.buffer.ChannelBuffer; import io.netty.channel.ChannelHandler; import io.netty.channel.ChannelPipeline; +import io.netty.handler.codec.CodecException; +import io.netty.handler.codec.EncoderException; import io.netty.handler.codec.base64.Base64Encoder; import io.netty.handler.codec.string.StringEncoder; import io.netty.util.CharsetUtil; @@ -57,4 +59,9 @@ public class EncoderEmbedder extends AbstractCodecEmbedder { channel().write(input); return !isEmpty(); } + + @Override + protected CodecException newCodecException(Throwable t) { + return new EncoderException(t); + } }