泽西岛客户端发布PUT InputStream“ 400错误的请求”

时间:2018-08-31 11:35:19

标签: jersey inputstream put jersey-client http-status-code-400

在我的代码中,我试图迭代n次来构建客户端并将输入流发送到远程端点:

for (int i=0; i<=100; i ++) {                       
    Client client = Client.create();

    WebResource webResource = client.resource("https://endpoint/EndOfDayRapport/eof_" + System.currentTimeMillis());

    SPMResponse response5 = webResource
        .type("text/xml").put(SPMResponse.class,myInputStream);         
    System.out.println(response5);
    try {
        Thread.sleep(1000);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

输入流包含消息的xml正文。 我注意到的是 第一次迭代...请求成功 第2次迭代响应为400错误请求... 第三400错误的要求。 等等...

如果我将inputstream更改为string ...,则采用真实的xml并使用PUT方法发送。 第一次迭代...请求成功 第二次迭代...请求成功 第三次迭代...请求成功 等等...

有什么区别?为什么它适用于字符串而不适用于输入流? (似乎输入流在第一次迭代后发生了变化) 在性能方面,使用inputstream或string更好吗?

1 个答案:

答案 0 :(得分:1)

请检查您的输入流。在我看来,您有以下问题: 在第一个请求上,您的输入流处于有效状态且有可用数据 在以下请求中,您的流已经结束了。因此,没有任何内容可读取,您可以发送球衣将其作为“错误请求”处理的空数据

因此,请尝试使用一个输入流,您可以在每次循环迭代时回滚和回滚它。

但也许这样会打败使用流的全部目的。