简体   繁体   English

无法获取解决不完整的输出流错误jclouds

[英]unable to get resolve Incomplete output stream error jclouds

I encountered an exception while trying to put an object using swift: 尝试使用swift放置对象时遇到异常:

org.jclouds.http.HttpResponseException: Incomplete output stream connecting to PUT http://xxx.xx.xx.xxx:8080/v1/AUTH_2c5c2fbbfe22422496d5ebf6861199f2/myContainer1/ HTTP/1.1
        at org.jclouds.http.internal.BaseHttpCommandExecutorService.invoke(BaseHttpCommandExecutorService.java:162)
        at org.jclouds.rest.internal.InvokeHttpMethod.invoke(InvokeHttpMethod.java:93)
        at org.jclouds.rest.internal.InvokeHttpMethod.apply(InvokeHttpMethod.java:76)
        at org.jclouds.rest.internal.InvokeHttpMethod.apply(InvokeHttpMethod.java:47)
        at here`org.jclouds.reflect.FunctionalReflection$FunctionalInvocationHandler.handleInvocation(FunctionalReflection.java:117)
        at com.google.common.reflect.AbstractInvocationHandler.invoke(AbstractInvocationHandler.java:79)
        at $Proxy66.put(Unknown Source)
        at com.cis.app.Appxkl.JCloudsSwift.uploadObjectFromString(JCloudsSwift.java:194)
        at com.cis.app.Appxkl.JCloudsSwift.main(JCloudsSwift.java:51)
Caused by: java.io.IOException: Incomplete output stream 
        at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)   
        at java.net.HttpURLConnection.getResponseCode(Unknown Source)
        at org.jclouds.http.internal.JavaUrlHttpCommandExecutorService.invoke(JavaUrlHttpCommandExecutorService.java:112)
        at org.jclouds.http.internal.JavaUrlHttpCommandExecutorService.invoke(JavaUrlHttpCommandExecutorService.java:72)
        at org.jclouds.http.internal.BaseHttpCommandExecutorService.invoke(BaseHttpCommandExecutorService.java:141)
        ... 8 more

The code is: 代码是:

 InputStream is = new ByteArrayInputStream(data.getBytes("UTF-8"));
 Payload payload = new InputStreamPayload(is);
 payload.getContentMetadata().setContentLength((long) 1000);

 ObjectApi objectApi = swiftApi.objectApiInRegionForContainer("RegionOne", CONTAINER_NAME);
 String str = "strName";
 objectApi.put(str, payload);

plz anyone guide me how resolve this 请任何人指导我如何解决这个问题

You should provide the correct content length instead of a bogus one, eg, 您应提供正确的内容长度,而不是虚假的内容长度,例如,

byte[] input = data.getBytes("UTF-8");
InputStream is = new ByteArrayInputStream(input);
Payload payload = new InputStreamPayload(is);
payload.getContentMetadata().setContentLength(input.length);

You can skip the InputStream entirely with a ByteArrayPayload which sets the length automatically and provides a repeatable Payload which can deal with network timeouts and other failures: 您可以使用ByteArrayPayload完全跳过InputStream ,该ByteArrayPayload自动设置长度并提供可重复的有效载荷,该有效载荷可以处理网络超时和其他故障:

byte[] input = data.getBytes("UTF-8");
Payload payload = new ByteArrayPayload(input);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM