Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java+;SOAP:执行同一SOAP服务两次时发生意外的IndexOutOfBoundsException_Java_Xml_Web Services_Jakarta Ee_Soap - Fatal编程技术网

Java+;SOAP:执行同一SOAP服务两次时发生意外的IndexOutOfBoundsException

Java+;SOAP:执行同一SOAP服务两次时发生意外的IndexOutOfBoundsException,java,xml,web-services,jakarta-ee,soap,Java,Xml,Web Services,Jakarta Ee,Soap,我将JakartaSOAPAPI(Jakarta.xml.SOAP)Maven库与Java结合使用。我试图连续两次执行同一个SOAP服务(让我们称之为服务A),以检索某种会话ID。我用的是Mac电脑 我可以在SOAP UI 5.5.0中连续两次执行此操作,但无法在Java 12中重现相同的结果: responseMessage = SOAPConnectionFactory.newInstance().createConnection().call( MessageFactory.newInst

我将JakartaSOAPAPI(Jakarta.xml.SOAP)Maven库与Java结合使用。我试图连续两次执行同一个SOAP服务(让我们称之为服务A),以检索某种会话ID。我用的是Mac电脑

我可以在SOAP UI 5.5.0中连续两次执行此操作,但无法在Java 12中重现相同的结果:

responseMessage = SOAPConnectionFactory.newInstance().createConnection().call(
MessageFactory.newInstance().createMessage(new MimeHeaders(), someSoapByteStream), targetURL);
这是我提供的SOAP主体:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:user="redacted">
<soapenv:Header/>
<soapenv:Body>
    <user:getSessionId>
        <!--Optional:-->
        <userCode>?</userCode>
        <!--Optional:-->
        <ipAddress>?</ipAddress>
    </user:getSessionId>
</soapenv:Body>
</soapenv:Envelope>
当我尝试使用Java在SOAP中连续两次执行此服务时,第一次调用成功,但第二次调用返回以下异常:

    Caused by: com.sun.xml.messaging.saaj.SOAPExceptionImpl: 
    com.sun.xml.messaging.saaj.SOAPExceptionImpl: Message send failed
    at 
    com.sun.xml.messaging.saaj.client.p2p.HttpSOAPConnection.call(HttpSOAPConnection.java:127)
    at utils.plugins.LocalSOAPUtils.callMessage(LocalSOAPUtils.java:115)
    ... 3 more
Caused by: com.sun.xml.messaging.saaj.SOAPExceptionImpl: Message send failed
    at com.sun.xml.messaging.saaj.client.p2p.HttpSOAPConnection.post(HttpSOAPConnection.java:259)
    at com.sun.xml.messaging.saaj.client.p2p.HttpSOAPConnection.call(HttpSOAPConnection.java:123)
    ... 4 more
    Caused by: java.lang.IndexOutOfBoundsException: Range [0, 0 + -1) out of bounds for length 1024
    at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64)
    at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckFromIndexSize(Preconditions.java:82)
    at java.base/jdk.internal.util.Preconditions.checkFromIndexSize(Preconditions.java:343)
    at java.base/java.util.Objects.checkFromIndexSize(Objects.java:424)
    at java.base/java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:155)
    at java.base/sun.net.www.http.PosterOutputStream.write(PosterOutputStream.java:78)
    at com.sun.xml.messaging.saaj.soap.MessageImpl.writeTo(MessageImpl.java:1396)
    at com.sun.xml.messaging.saaj.client.p2p.HttpSOAPConnection.post(HttpSOAPConnection.java:216)
... 5
我能够再次成功执行此服务的唯一方法是从一开始就运行代码,在这种情况下,第一次调用将再次成功,但第二次调用将不会成功


这里可能发生了什么导致这种行为?雅加达SOAP中是否设置了一些静态变量,导致第一个调用总是成功,而第二个调用总是失败?第二次服务调用的具体情况是什么?

好的,因此我在同一字节流上调用了上述方法,这意味着第二次调用时,流的位置已经移动,因此导致了上述错误

我通过简单地初始化一个新的ByTestStream解决了这个问题:

responseMessage=SOAPConnectionFactory.newInstance().createConnection().call(

MessageFactory.newInstance().createMessage(新的MIMHEADERS(),新的ByteArrayInputStream(SomeSoapByTestStreamAsString.getBytes()),targetURL)

好的,结果是我在同一字节流上调用了上述方法,这意味着第二次调用时,流的位置已经移动,因此导致了上述错误

我通过简单地初始化一个新的ByTestStream解决了这个问题:

responseMessage=SOAPConnectionFactory.newInstance().createConnection().call(

MessageFactory.newInstance().createMessage(新的MIMHEADERS(),新的ByteArrayInputStream(SomeSoapByTestStreamAsString.getBytes()),targetURL)

您的SomeSoapByTestStream是否可能为空或存在其他问题?你能分享一下你的实现吗?嗨@Taschi,原来soapbytestream确实有问题;也就是说,我第二次叫它时,它的位置已经移动了。我已经在下面相应地回答了我的问题。您的SomeSoapByTestStream是否可能为null,或者是否存在其他问题?你能分享一下你的实现吗?嗨@Taschi,原来soapbytestream确实有问题;也就是说,我第二次叫它时,它的位置已经移动了。我在下面相应地回答了我的问题。
    Caused by: com.sun.xml.messaging.saaj.SOAPExceptionImpl: 
    com.sun.xml.messaging.saaj.SOAPExceptionImpl: Message send failed
    at 
    com.sun.xml.messaging.saaj.client.p2p.HttpSOAPConnection.call(HttpSOAPConnection.java:127)
    at utils.plugins.LocalSOAPUtils.callMessage(LocalSOAPUtils.java:115)
    ... 3 more
Caused by: com.sun.xml.messaging.saaj.SOAPExceptionImpl: Message send failed
    at com.sun.xml.messaging.saaj.client.p2p.HttpSOAPConnection.post(HttpSOAPConnection.java:259)
    at com.sun.xml.messaging.saaj.client.p2p.HttpSOAPConnection.call(HttpSOAPConnection.java:123)
    ... 4 more
    Caused by: java.lang.IndexOutOfBoundsException: Range [0, 0 + -1) out of bounds for length 1024
    at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64)
    at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckFromIndexSize(Preconditions.java:82)
    at java.base/jdk.internal.util.Preconditions.checkFromIndexSize(Preconditions.java:343)
    at java.base/java.util.Objects.checkFromIndexSize(Objects.java:424)
    at java.base/java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:155)
    at java.base/sun.net.www.http.PosterOutputStream.write(PosterOutputStream.java:78)
    at com.sun.xml.messaging.saaj.soap.MessageImpl.writeTo(MessageImpl.java:1396)
    at com.sun.xml.messaging.saaj.client.p2p.HttpSOAPConnection.post(HttpSOAPConnection.java:216)
... 5