Java:不支持的内容编码:text / xml发布text / xml

时间:2014-01-24 18:18:57

标签: java xml apache httprequest

我通过Java发布服务并收到不支持的内容编码:text / xml错误。

我知道该服务已成功接收并处理我的帖子并尝试发回适当的响应。该服务位于另一台计算机上,会发出日志。我还将该日志发送给编写守护程序/服务的供应商,并被告知该服务符合我的请求,并且问题出在Java端。

问题似乎是设置响应的txt / xml内容类型,从错误消息判断。

错误堆栈跟踪:

org.apache.http.client.ClientProtocolException
    at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:188)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:106)
    at PkgNetAccelerator32.htsLink.createLink(htsLink.java:100)
...
Caused by: org.apache.http.HttpException: Unsupported Content-Coding: text/xml
    at org.apache.http.client.protocol.ResponseContentEncoding.process(ResponseContentEncoding.java:98)
    at org.apache.http.protocol.ImmutableHttpProcessor.process(ImmutableHttpProcessor.java:139)
    at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:200)
    at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:85)
    at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:108)
    at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:186)
        ... 14 more

源代码:

String strPathLocal = "http://192.168.20.65:8080/xml/link";
HttpPost httpPost = new HttpPost(strPathLocal);

String xmlPost = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><Whatever>...</Whatever>";
StringEntity entity = new StringEntity(xmlPost);
entity.setContentType("text/xml");
httpPost.setEntity(entity);

CloseableHttpResponse response2 = httpclient.execute(httpPost);

System.out.println(response2.getStatusLine());
HttpEntity entity2 = response2.getEntity();
EntityUtils.consume(entity2);
response2.close();

为了便于阅读,我拿出了try-catch块和其他一些东西。

代码永远不会超过httpclient.execute()行。

我做了一些搜索,看到一张票使用“application / xml”。我试过了,但是这引起了同样的问题。

3 个答案:

答案 0 :(得分:3)

在我看来,您的服务器正在发送标题,例如

Content-Encoding: text/xml

什么时候(可能)应该发送

Content-Type: text/xml

目前,Apache的HttpClient可以处理gzipx-gzipdeflateidentity类型的内容编码。对于任何其他值,它会抛出异常。

答案 1 :(得分:0)

正如您在ResponseContentEncoding sources中看到的那样,当服务器答案包含未处理的内容编码标头时,会发生此异常。

因此,您需要调整服务器代码,以便通过适当的内容编码“提供”其答案。

答案 2 :(得分:0)

我在使用API​​时遇到了同样的问题,在堆栈跟踪中发出了“不支持的内容编码:application / xml ”。

根据https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers,不要认为'内容编码'根本就是一件事。但是会对服务器配置错误以提供“内容编码”或“内容类型”的信息感到乐观。