Java: Content-Coding non pris en charge: text / xml posting text / xml

Je publie sur un service via Java et je reçois une erreur de contenu non codée: text / xml.

Je sais que le service reçoit et traite mon message avec succès et tente de renvoyer la réponse appropriée. Le service, situé sur un autre ordinateur, émet un journal. J’ai également envoyé ce journal au fournisseur qui a écrit le démon / service et on m’a dit que le service était conforme à ma demande et que le problème se trouvait à la fin de Java.

Le problème semble être la configuration du type de contenu txt / xml de la réponse, à en juger par le message d’erreur.

Trace de stack d’erreur:

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 

Code source:

 Ssortingng strPathLocal = "http://192.168.20.65:8080/xml/link"; HttpPost httpPost = new HttpPost(strPathLocal); Ssortingng xmlPost = "..."; SsortingngEntity entity = new SsortingngEntity(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(); 

J’ai sorti les blocs try-catch et certains autres éléments pour plus de lisibilité.

Le code ne passe jamais la ligne httpclient.execute ().

J’ai fait quelques recherches et j’ai vu un ticket utiliser “application / xml”. J’ai essayé cela, mais cela a causé le même problème.

Il me semble que votre serveur envoie un en-tête tel que

 Content-Encoding: text/xml 

quand (probablement) devrait être envoyé

 Content-Type: text/xml 

À l’ HttpClient , HttpClient d’Apache peut gérer les encodages de contenu de type gzip , x-gzip , deflate et identity . Pour toute autre valeur, il génère des exceptions.

Comme vous pouvez le voir dans les sources ResponseContentEncoding , cette exception se produit lorsque la réponse du serveur contient un en-tête de codage de contenu non géré.

Vous devez donc adapter le code du serveur pour “servir” sa réponse avec un encodage de contenu correct.

J’ai eu le même problème en consommant une API, en donnant « Codage du contenu non pris en charge: application / xml » dans la trace de la stack.

Ne pensez pas que le « Content-Coding » est une chose du tout selon https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers . Mais nous nous amuserons sur le fait que le serveur est mal configuré pour donner cette information qui devrait être ” Content-Encoding ” ou ” Content-Type “.