Ratpack - сработало событие exceptionCaught()

У кого-нибудь есть идеи, почему выдается перечисленное исключение после вызова / пользовательского URL? Это довольно странно, потому что все работает так, как ожидается (восходящий сервис обрабатывает ответ нижестоящего и отправляет ответ клиенту). Использование Ratpack 1.4.1, Полный код доступен: https://github.com/peterjurkovic/ratpack-demo

Изменить: Я только что попытался перейти на версию 1.3.3 и с этой версией Ratpack этого не происходит. Github проблема создана.

Изменить 2: проблема должна быть решена в следующей версии 1.4.2,

public class DownstreamUserService {

    Logger log = LoggerFactory.getLogger(DownstreamUserService.class);

    private HttpClient httpClient;
    private ObjectMapper mapper;
    private URI downstreamServerUri;

    @Inject
    public DownstreamUserService(HttpClient httpClient, Config config, ObjectMapper mapper) {
        this.httpClient = httpClient;
        this.mapper = mapper;
        try {
            downstreamServerUri = new URI("http://" + config.getHost() + ":" + config.getPort() + "/endpoint");
        } catch (URISyntaxException e) {
            log.error("",e);
            throw new RuntimeException(e);
        }
    }

    public Promise<User> load(){
        return httpClient.get( downstreamServerUri )
                .onError(e -> log.info("Error",e))
                .map( res -> mapper.readValue(res.getBody().getBytes(), User.class));

    }
}

сервер

 public class App {

    static Logger log = LoggerFactory.getLogger(App.class); 

    public static void main(String[] args) throws Exception {
        RatpackServer.start(s -> s 
         // bindings..
         .handlers( chain -> chain

             .get("user", c -> {
                 DownstreamUserService service = c.get(DownstreamUserService.class);
                 service.load().then( user -> c.render( json(user) ));
             })
    }
}

Трассировки стека:

    [2016-08-28 22:58:24,979] WARN  [ratpack-compute-1-2] i.n.c.DefaultChannelPipeline - An exceptionCaught() event was fired, and it reached at the tail of the pipeline. It usually means the last handler in the pipeline did not handle the exception.
io.netty.handler.codec.PrematureChannelClosureException: channel gone inactive with 1 missing response(s)
    at io.netty.handler.codec.http.HttpClientCodec$Decoder.channelInactive(HttpClientCodec.java:261)
    at io.netty.channel.CombinedChannelDuplexHandler.channelInactive(CombinedChannelDuplexHandler.java:220)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:255)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:241)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive(AbstractChannelHandlerContext.java:234)
    at io.netty.channel.DefaultChannelPipeline$HeadContext.channelInactive(DefaultChannelPipeline.java:1329)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:255)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:241)
    at io.netty.channel.DefaultChannelPipeline.fireChannelInactive(DefaultChannelPipeline.java:908)
    at io.netty.channel.AbstractChannel$AbstractUnsafe$7.run(AbstractChannel.java:744)
    at io.netty.util.concurrent.SingleThreadEventExecutor.safeExecute(SingleThreadEventExecutor.java:451)
    at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:418)
    at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:306)
    at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:877)
    at ratpack.exec.internal.DefaultExecController$ExecControllerBindingThreadFactory.lambda$newThread$0(DefaultExecController.java:136)
    at ratpack.exec.internal.DefaultExecController$ExecControllerBindingThreadFactory$$Lambda$129/1240843015.run(Unknown Source)
    at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:144)
    at java.lang.Thread.run(Thread.java:745)

0 ответов

Другие вопросы по тегам