Como han mencionado Norman y Veebs, sin entender sus requisitos precisos es un poco difícil dar una respuesta precisa, sin embargo ... Creo que lo siguiente proporciona una forma genérica de manejar los errores del servidor que no esperaba. Devuelve un HTTP 500 'Internal Server Error' al cliente y luego cierra el canal. Obviamente, estoy asumiendo que sus clientes están solicitando y recibiendo a través de HTTP lo que pueden no ser, en cuyo caso la solución de Veebs es mejor.
import org.jboss.netty.channel.ChannelFutureListener;
import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.channel.ExceptionEvent;
import org.jboss.netty.channel.SimpleChannelHandler;
import org.jboss.netty.handler.codec.http.DefaultHttpResponse;
import org.jboss.netty.handler.codec.http.HttpResponse;
import org.jboss.netty.handler.codec.http.HttpResponseStatus;
import org.jboss.netty.handler.codec.http.HttpVersion;
public class ServerErrorHandler extends SimpleChannelHandler {
@Override
public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e)
throws Exception {
HttpResponse err = new DefaultHttpResponse(HttpVersion.HTTP_1_1,
HttpResponseStatus.INTERNAL_SERVER_ERROR);
e.getChannel().write(err).addListener(ChannelFutureListener.CLOSE);
}
}
Nota si utiliza esta solución, entonces tendrá que añadir un HttpResponseDecoder a su tubería también.
Obviamente, si tiene excepciones específicas que desea capturar y manejar, entonces debe escribir algo de lógica adicional aquí para hacerlo.
HTH!