我们使用了 Java 1.5.03 环境和 wasp java web 服务(使用了 wasp 55 库)。当我们尝试将 xml
对象保存到 DB 中时,有时我们会遇到以下异常。如果重试相同的对象,则保存成功。
例外:
java.lang.ArrayIndexOutOfBoundsException
at java.net.SocketOutputStream.socketWrite(Unknown Source)
at java.net.SocketOutputStream.write(Unknown Source)
at com.idoox.transport.util.MyBufferedOutputStream.write(SocketPool.java:479)
at java.io.ByteArrayOutputStream.writeTo(Unknown Source)
at com.idoox.transport.http.ChunkableOutputStream.close(ChunkableOutputStream.java:138)
at com.idoox.transport.http.client.HttpRequest.letsGo(HttpRequest.java:392)
at com.idoox.transport.http.client.HttpRequest.close(HttpRequest.java:311)
at com.idoox.transport.http.client.HttpRequest.resend(HttpRequest.java:344)
at com.idoox.transport.http.client.HttpResponse.letsGo(HttpResponse.java:380)
at com.idoox.transport.http.client.HttpResponse.getStatusCode(HttpResponse.java:54)
at org.idoox.transport.InputMessageWrapper.getStatusCode(InputMessageWrapper.java:57)
at org.idoox.transport.InputMessageWrapper.getStatusCode(InputMessageWrapper.java:57)
com.systinet.wasp.client.XMLInvocationHelperImpl._receive(XMLInvocationHelperImpl.java:630)
com.systinet.wasp.client.XMLInvocationHelperImpl._receive(XMLInvocationHelperImpl.java:606)
at com.systinet.wasp.client.XMLInvocationHelperImpl._call(XMLInvocationHelperImpl.java:144)
at com.systinet.wasp.client.XMLInvocationHelperImpl.call(XMLInvocationHelperImpl.java:76)
at org.systinet.wasp.client.XMLInvocationHelper.call(XMLInvocationHelper.java:18)
at com.systinet.wasp.rpc.WaspCallImpl.invoke(WaspCallImpl.java:495)
at com.systinet.wasp.rpc.WaspCallImpl.invoke(WaspCallImpl.java:453)
at com.systinet.wasp.client.ClientProxy._invoke(ClientProxy.java:454)
at com.systinet.wasp.client.ClientProxy.invoke(ClientProxy.java:112)
at $Proxy44.save(Unknown Source)
当我们在 xp 环境中工作时,我们无法看到这个错误。当我们在 Windows 8 中工作时,我们可以多次看到它。
所以我SocketOutputStream
在 Windows 8 环境中重新编译了 java 类,并构建了 java rt.jar
并将其放入 jre。然后用新的 jre 运行应用程序,我们看不到错误。
错误逻辑:
if (len <= 0 || off < 0 || off + len > b.length) {
if (len == 0) {
return;
}
throw new ArrayIndexOutOfBoundsException();
}
据我所知,有时off + len > b.length
逻辑是失败的。
但是我们无法理解为什么这个逻辑是失败的?以及,我们如何修复它。
请帮我解决这个问题,非常感谢您的反馈。