Как уже упоминали Норман и Вибс, без понимания ваших точных требований, однако, немного сложно дать точный ответ ...
Я думаю, что следующее предоставляет общий способ обработки ошибок сервера, которые вы не ожидали. Он возвращает HTTP 500 «Внутренняя ошибка сервера» клиенту и затем закрывает канал. Очевидно, я делаю предположение, что ваши клиенты запрашивают и получают по HTTP, а это не так, и в этом случае решение Veebs лучше.
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);
}
}
Обратите внимание, что если вы используете это решение, вам также потребуется добавить HttpResponseDecoder в ваш конвейер.
Очевидно, что если у вас есть конкретные исключения, которые вы хотите отлавливать и обрабатывать, то вы должны написать здесь дополнительную логику, чтобы сделать это.
НТН!