SocketWrite方法Java 1.5.03中出现ArrayIndexOutofBound()异常

SocketWrite方法Java 1.5.03中出现ArrayIndexOutofBound()异常,java,indexoutofboundsexception,java-5,wasp,Java,Indexoutofboundsexception,Java 5,Wasp,我们使用Java1.5.03环境,wasp Java web服务使用wasp 55库。 当我们试图将xml对象保存到DB中时,有时会出现以下异常。 如果重试同一对象,则会成功保存该对象 例外情况: java.lang.ArrayIndexOutOfBoundsException at java.net.SocketOutputStream.socketWrite(Unknown Source) at java.net.SocketOutputStream.write(Unk

我们使用Java1.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环境中工作时,我们无法看到这个错误。 当我们在Windows8中工作时,我们可以多次看到它

因此,我在Windows8环境中重新编译了JavaSocketoutputStream类,并构建了JavaRT.jar并将其放入jre。然后使用新的jre运行应用程序, 我们看不到错误

错误逻辑:

if (len <= 0 || off < 0 || off + len > b.length) {
        if (len == 0) {
        return;
        }
        throw new ArrayIndexOutOfBoundsException();
}
据我所知,有时off+len>b.长度逻辑失败

但我们不明白为什么这个逻辑失败了?还有,我们如何修复它


请帮助我解决这个问题,并高度感谢您的反馈。

我认为您所做的是错误的。您是否在Oracle Java网站上查找了与此问题相关的任何公开bug?我认为你所做的只是掩盖问题的真正原因。我在XP、Vista和Windows7中使用代码,它移植得很好。我也曾在Windows8上使用过Java,从未遇到过这个问题。我想知道您是否因为order in PATH环境变量而使用了错误的Java版本。不,我们使用了正确的Java版本Java 1.5.03。我完全同意@hfontanez。摆弄JRE并不能解决这个问题。我的钱主要花在com.idoox.transport.util.MyBufferedOutputStream.writeSocketPool.java:479方法上。这是什么?嗨,EJP:我们使用了wasp web服务,这个类来自wasp。jar@DileepaMax,以及您在计算机上安装的JRE,您可以在windows\system32文件夹中找到另一个java.exe。而且,最有可能的是,该路径将首先在path环境变量中声明。我不是说这是你的问题,但是如果你用一个版本编译你的程序,而windows在system32文件夹中有另一个版本的Java,你可能会遇到问题。关键是,您的计算机中有不止一个版本的Java,当您执行Java程序时,您必须知道您正在使用哪个版本。