当前位置: 首页 > 知识库问答 >
问题:

dropwizard org.eclipse.jetty.io.EOFException:早期EOF异常

任文乐
2023-03-14

Dropwizard版本:1.1.4 jetty-server版本:2.25.1

错误发生在下面一行的代码中:Request.BufferEntity()

private String getBody(ContainerRequestContext requestContext) {
        if (requestContext instanceof ContainerRequest) {
            ContainerRequest request = (ContainerRequest) requestContext;
            // calling bufferEntity(), without this the entity is marked as closed and causes IllegalStateExceptions
            // on any subsequent read attempt
            request.bufferEntity();
            return request.readEntity(String.class);
        } else {
            // this should never happen as we are using jersey as the jax-rs implementation engine
            throw new RuntimeException("ContainerRequestContext is not an instance of jersey ContainerRequest");
        }
    }

共有1个答案

吴兴国
2023-03-14

这个问题在1.3.8中仍然存在,并且是一个公开的问题。

嗯。似乎有个变通办法。您可以创建一个筛选类,用于筛选异常并检查早期EOF。这是一个对我的案子非常特别的黑客。不过,你明白了。我已经测试过了,它起作用了。这是过滤器片段。


  @Override
  public void doFilter(
      final ServletRequest request,
      final ServletResponse response,
      final FilterChain chain)
      throws IOException, ServletException {
    try {
      chain.doFilter(request, response);
    } catch (ServletException e) {
      if (isEarlyEofException(e)) {
        log.debug("EOF Exception encountered - client disconnected during stream processing.", e);

        if (response instanceof HttpServletResponse) {
          ((HttpServletResponse) response).setStatus(HttpServletResponse.SC_BAD_REQUEST);
        }
      } else {
        throw e;
      }
    }
  }

  private boolean isEarlyEofException(final ServletException e) {
    return e.getCause() instanceof ProcessingException
        && e.getCause().getCause() instanceof EofException
        && e.getCause().getCause().getMessage().equals(EARLY_EOF_MSG);
  }

然后应用筛选器。

  private void addEarlyEofExceptionFilter(final Environment environment) {
    final FilterRegistration.Dynamic filter =
        environment.servlets().addFilter("EarlyEofExceptionFilter", EarlyEofExceptionFilter.class);

    filter.addMappingForUrlPatterns(EnumSet.allOf(DispatcherType.class), true, "/*");
  }
 类似资料:
  • 我在谷歌上搜索并找到了许多解决方案,但没有一个适合我。 我正试图通过连接到局域网中的远程服务器从一台机器上克隆 从另一台计算机运行此命令会导致错误 但是使用运行相同的克隆命令git://192.168.8.5 ... 在服务器上,一切正常且成功。 有什么想法吗? 我在但也没有帮助 使用git版本1.8.5.2。msysgit。0

  • 我试图使用Kerberos从ActiveMQ-Camel桥向Kafka (Cloudera)发送消息。 ActiveMQ v5.15.4 骆驼:2.21.1 Kafka客户端:1.1.0 服务器版本:Apache/2.4.6(CentOS) 骆驼.xml剪刀是: 这是日志中的kafka客户端配置: 日志级别:调试 Jaas文件: 出口: 当我发送消息时,我在调试级别收到以下日志,但消息未被发送:

  • 我有一套和一个方法: 我可以终止lambda内部的forEach吗(使用或不使用异常)?我应该使用匿名类吗? 我可以这样做: 我正在寻找最快的解决方案,所以异常和一个'real'为每个循环是可以接受的,如果他们是足够快的。

  • 问题内容: 我陷入了这个非常奇怪的问题。在客户端中,我传递的对象是 在服务器中,我正在读取对象 我的问题是为什么我会出现EOF异常。我对对象输入流的理解是,当我调用readObject()时应该阻塞直到获得对象,这样才能知道是否达到了eof?请帮忙! 这就是我创建对象流的方式 另外,在我写完对象并刷新之后,我应该关闭流。我不会关闭它,因为对象是从代码的不同部分开始一个接一个地定期编写的。 问题答案

  • eof

    描述 (Description) 如果FILEHANDLE上的下一次读取将返回文件结尾,或者如果FILEHANDLE未打开,则此函数返回1。 没有参数的eof使用最后读取的文件。 使用带空括号的eof()是非常不同的。 它指的是由命令行中列出的文件形成的伪文件,可通过<>运算符访问。 语法 (Syntax) 以下是此函数的简单语法 - eof FILEHANDLE eof() eof 返回值 (