好吧,我有一个让我疯狂的问题!
我在Weblogic 12.1.1 -e.e.:Weblogic 12c上部署了一个Web应用程序
在某些时候,我想使用以下方式阅读图像文件:
BufferedImage templateImage = ImageIO.read(new URL(url));
上一行在某些图片上失败,并带有以下愚蠢的消息:
For input string: ""
有人建议我使用以下参数更改Weblogic的HTTP处理程序:
-DUseSunHttpHandler=true
它解决了问题但我无法实施此解决方案,因为它会非常危险。
让我更加疯狂的是,当我使用" Paint"修改图片时,添加/删除一些虚拟颜色和/或形状,它就过去了!!
(虽然并非所有更改都会通过)。
这是我的第一个问题,我非常感谢你的帮助。
P.S。:问题仅出现在" Weblogic 12c"而不是11g或其他任何内容。
编辑:下面是堆栈跟踪:
java.io.IOException: For input string: ""
at weblogic.utils.http.HttpChunkInputStream.initChunk(HttpChunkInputStre
am.java:69)
at weblogic.utils.http.HttpChunkInputStream.skip(HttpChunkInputStream.ja
va:215)
at weblogic.utils.http.HttpChunkInputStream.skipAllChunk(HttpChunkInputS
tream.java:395)
at weblogic.utils.http.HttpChunkInputStream.close(HttpChunkInputStream.j
ava:291)
at weblogic.net.http.KeepAliveStream.close(KeepAliveStream.java:122)
at javax.imageio.ImageIO.read(ImageIO.java:1405)
答案 0 :(得分:0)
堆栈跟踪显示ImageIO.read(...)
实际上已经完成了读取图像(可能是一个好的图像,可能是不起作用),并且正在关闭流...
堆栈跟踪还显示问题是由WebLogic类HttpChunkInputStream
引起的。因此,在处理chunked transfer encoding时,它似乎是WebLogic中的一个错误(请注意,它可能也是您连接的服务器在其分块传输编码中存在错误) 。
当您在Paint中修改图像时,副作用是它可能使图像小一些字节或更大几个字节,因此您不会遇到错误。
由此看来,使用-DUseSunHttpHandler=true
开关或升级WebLogic似乎是最好的选择。或者,您可以尝试按上面所述读取字节,并忽略来自IOException
的{{1}}(但可能存在数据确实已损坏,因此这不是100%简单的证明)
答案 1 :(得分:0)
由于我现在几乎可以肯定它是一个WebLogic Bug,我重写了代码:
URL url = new URL("url")
File file = new File("New File Path");
InputStream inputStream = url.openStream();
OutputStream outputStream = new FileOutputStream(file);
try {
IOUtils.copy(inputStream, outputStream);
} finally {
outputStream.close();
inputStream.close();
}
BufferedImage actualImage = ImageIO.read(file);
新代码的主要区别在于它将read()方法传递给[File]实例而不是[URL]实例。