java - WebLogic 文件传输失败? java.io.IOException : failed to read '2607' bytes from InputStream

标签 java internet-explorer weblogic file-transfer

我们有一个提供 PDF 文件(以及许多其他内容)的 WebLogic 应用程序。

我们遇到的问题是,有时某些文件在使用 Internet Explorer 加载时似乎会失败。

  • WebLogic 版本 10.3.3.0
  • IE 8.0 到目前为止测试结果呈阳性
  • Firefox 也存在问题
    • 可能有一些文件在 IE 中存在问题,但在 Firefox 中没有问题(不是 100% 确定)
  • 对于不同计算机上的某些文件,似乎会发生这种情况(至少发生几次)
  • 大多数文件运行良好
  • PDF 文件预先生成并可在文件系统中使用。

出现这些错误时,我们得到以下堆栈跟踪:

####<Aug 16, 2012 10:30:26 AM EEST> <Error> <HTTP> <host-name> <Front2S> <[ACTIVE] ExecuteThread: '15' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1345102226691> <WL-101019> <[ServletContext@454961994[app:appname module:modulename path:/pathname spec-version:2.5]] Servlet failed with IOException
java.io.IOException: failed to read '2607' bytes from InputStream; clen: 162774 remaining: 2607 count: 1359
        at weblogic.servlet.internal.ChunkOutput.writeStream(ChunkOutput.java:417)
        at weblogic.servlet.internal.ChunkOutputWrapper.writeStream(ChunkOutputWrapper.java:178)
        at weblogic.servlet.internal.ServletOutputStreamImpl.writeStream(ServletOutputStreamImpl.java:520)
        at weblogic.servlet.internal.ServletOutputStreamImpl.writeStream(ServletOutputStreamImpl.java:508)
        at weblogic.servlet.FileServlet.sendFile(FileServlet.java:410)
        at weblogic.servlet.FileServlet.doGetHeadPost(FileServlet.java:234)
        at weblogic.servlet.FileServlet.service(FileServlet.java:173)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:821)
        at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
        at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:300)
        at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:27)
        at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:57)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:344)
        at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84)
    ...
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:356)
        at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:151)
        at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:238)
        at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:168)
        at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3650)
        at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
        at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2174)
        at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1446)
        at weblogic.work.ExecuteThread.run(ExecuteThread.java:173)

通过谷歌搜索,我发现如果文件在传输过程中被修改,可能会发生类似的情况。

  • 至少我们看不出这是如何发生的(生成文件的脚本在晚上运行,错误是在白天出现的)
  • 对于特定文件,这种情况也会多次发生

很久以前,我们在 WebLogic 文件元数据缓存方面遇到了类似的问题,但禁用元数据缓存解决了这个问题。

<wls:container-descriptor>
    <wls:resource-reload-check-secs>0</wls:resource-reload-check-secs>
</wls:container-descriptor>

一些想法?

兄弟,灯子

最佳答案

您对错误原因的看法是正确的。当文件在读取时被修改时,就会出现此问题。

您的resource-reload-check-secs配置是正确的。将其保留为 0(零),以便 WLS 将重新加载最新文件。

检查您是否正在使用 page-check-seconds 设置以及该设置的值是否为 0。此设置覆盖 resources-reload-check-secs,因此如果您的值不同于0(零),然后将其设置为 0。

总之,我的建议是在 weblogic.xml 中添加值为 0 的 page-check-seconds 设置,并增加 weblogic.Chunksize,以防您有较大的请求尺寸。该属性的值应为网络 MTU 减去任何以太网或 TCP header 大小后的倍数。

希望以下weblogic.xml配置对您有所帮助:

<jsp-descriptor>
    <page-check-seconds>0</page-check-seconds>
</jsp-descriptor>
<container-descriptor>
    <resource-reload-check-secs>0</resource-reload-check-secs>
</container-descriptor>

此外,请注意,此问题有补丁修复。

关于java - WebLogic 文件传输失败? java.io.IOException : failed to read '2607' bytes from InputStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12001339/

相关文章:

java - 更改方法可访问性以对其进行测试

java - TriangleMesh - 背面可见

javascript - DD_belatedPNG 无需编辑标记

java - 我的JDK和Weblogic可以在不同的目录中吗

weblogic - 如何将 Jprofiler 与 weblogic 管理的服务器连接起来?

java - 在 java 中使用 SAX 解析 XML,不区分大小写。

java - 从 json 反序列化到包含枚举的对象的问题

jquery - IE 失去对模态输入字段的关注

javascript - jQuery .focus() 不起作用

WebLogic 12c - 错误 : ADRS_DOMAIN_PASSWORD environment variable not set