You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cxf.apache.org by "Sergey Beryozkin (JIRA)" <ji...@apache.org> on 2017/08/02 11:15:01 UTC

[jira] [Resolved] (CXF-7459) JAX-RS WebClient.invoke() do not respect Content-Type setting in HTTP-Conduit

     [ https://issues.apache.org/jira/browse/CXF-7459?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Sergey Beryozkin resolved CXF-7459.
-----------------------------------
       Resolution: Fixed
         Assignee: Sergey Beryozkin
    Fix Version/s: 3.2.0
                   3.1.13

Give 3.1.13-SNAPSHOT a try please

> JAX-RS WebClient.invoke() do not respect Content-Type setting in HTTP-Conduit
> -----------------------------------------------------------------------------
>
>                 Key: CXF-7459
>                 URL: https://issues.apache.org/jira/browse/CXF-7459
>             Project: CXF
>          Issue Type: Bug
>          Components: JAX-RS
>    Affects Versions: 3.1.5
>            Reporter: Luke Xu
>            Assignee: Sergey Beryozkin
>             Fix For: 3.1.13, 3.2.0
>
>
> Hi,
> We got in some problem while using WebClient.invoke() to communicate external services.
> The message sent by WebClient.invoke() comes from other part of our product, which plays the role of an integrator basing on configuration. Thus during development, we can't know the real type of message and set all message type in the invoke method as inputStream. Other information of the connection for example Content-Type is set in http-conduit.
> The problem we found is that under our usage of WebClient.invoke(), Content-Type in http-conduit can't be set to application/x-www-form-urlencoded. It is set back to default value application/xml as is WebClient. But it is not true for other type of Content-Type setting in conduit. To set ourselves' headers object to the WebClient before invoking it bypasses the issue as well.
> Another problem is logging feature lies on this issue. application/x-www-form-urlencoded is showed in log but if monitoring with third part tool it's application/xml.
> Related configuration xml:
> {quote}
>     <http:conduit name="*.http-conduit">
>         <http:client AutoRedirect="false" AllowChunking="false" Accept="*/*" ContentType="application/x-www-form-urlencoded"/>
>     </http:conduit>
>     <cxf:bus>
>         <cxf:features>
>             <cxf:logging/>
>         </cxf:features>
>     </cxf:bus>
> {quote}
> Sample code of our product to call service.
> {quote}
>         if (webClientTemplate == null) \{
>             // create from the url and provider list
>             webClientTemplate = WebClient.create(address, providerList);
>             // copy the headers over
>             MultivaluedMap<String, String> tempHeaders = webClientTemplate.getHeaders();
>             for (String key : headers.keySet()) \{
>                 String value = headers.get(key);
>                 tempHeaders.putSingle(key, value);
>             }
>             webClientTemplate.headers(tempHeaders);
>         }
>         // now we always have a template, copy it for best speed in creating a web client
>         return WebClient.fromClient(webClientTemplate, true);
>         ......
>         responseStream = webClient.invoke(requestMethod, requestStream, InputStream.class);
> {quote}
> Comparing logging we got between old version and 3.1.5 we are in use.
> {quote}
> Working (2.7.8):
>  
> INFO: Outbound Message
> ---------------------------
> ID: 1
> Address: https://developer.tigertext.me/v2/message
> Http-Method: POST
> Content-Type: application/x-www-form-urlencoded
> Headers: \{Content-Type=\[application/xml], Accept=\[*/*], Authorization=\[Basic VFF3Y1ZUOXljaHpFVG93bkVTUVpxc3g2cm9oaE5yUDU6V1lUeGpDUzgwTEF6YWFTOWNyRFp3QlhTZnRjRmxmb1JBMDFHbW9MUFpwZUJxbG14], Connection=\[Keep-Alive]}
> Payload: recipient=%2B15739992640&ttl=1440&body=Patient Test, ADM (DOB: 19650414) has been admitted to Stamford Hospital and indicated you as their PCP.
> --------------------------------------
>  
> INFO: Inbound Message
> ----------------------------
> ID: 1
> Response-Code: 204
> Encoding: ISO-8859-1
> Content-Type: application/json
> Headers: \{connection=\[keep-alive], Content-Length=\[0], content-type=\[application/json], Date=\[Wed, 26 Jul 2017 21:04:48 GMT], Server=\[nginx], TT-X-Message-Id=\[67e0fa88-4965-41a7-a37a-97ec0280d4ec], TT-X-Msg-Ttl=\[1440], TT_Log_Account_Token=\[d7d6b87c-1ccd-4ad1-bc2b-40f2d4d28e1d], TT_Log_API_Key=\[16675b77-a1d7-4815-96e4-9802254cb3f3], TT_Log_HTTP_Verb=\[POST], TT_Log_Message_ID=\[67e0fa88-4965-41a7-a37a-97ec0280d4ec], TT_Log_Organization=\[agbdTQbwmlqiasaI2zkPLFO2], TT_Log_Processed_By_Host=\[prod-tigerconnect-xmpp-i-08fc29d0a5e5715a2], TT_Log_Product_Token=\[consumer], TT_Log_Traffic_Type=\[public], TT_Log_URI_Name=\[/api/message/message_id]}
> --------------------------------------
>  
>  
> Not working (3.1.5):
>  
> INFO: Outbound Message
> ---------------------------
> ID: 1
> Address: https://developer.tigertext.me/v2/message
> Http-Method: POST
> Content-Type: application/x-www-form-urlencoded
> Headers: \{Content-Type=\[application/xml], Accept=\[*/*], Authorization=\[Basic VFF3Y1ZUOXljaHpFVG93bkVTUVpxc3g2cm9oaE5yUDU6V1lUeGpDUzgwTEF6YWFTOWNyRFp3QlhTZnRjRmxmb1JBMDFHbW9MUFpwZUJxbG14], Connection=\[Keep-Alive]}
> Payload: recipient=%2B15739992640&ttl=1440&body=Patient Test, ADM (DOB: 19650414) has been admitted to Stamford Hospital and indicated you as their PCP.
> --------------------------------------
>  
> INFO: Inbound Message
> ----------------------------
> ID: 1
> Response-Code: 415
> Encoding: ISO-8859-1
> Content-Type: application/json
> Headers: \{connection=\[keep-alive], Content-Length=\[0], content-type=\[application/json], Date=\[Wed, 26 Jul 2017 20:56:48 GMT], Server=\[nginx], TT_Log_Account_Token=\[d7d6b87c-1ccd-4ad1-bc2b-40f2d4d28e1d], TT_Log_API_Key=\[16675b77-a1d7-4815-96e4-9802254cb3f3], TT_Log_HTTP_Verb=\[POST], TT_Log_Organization=\[agbdTQbwmlqiasaI2zkPLFO2], TT_Log_Processed_By_Host=\[prod-tigerconnect-xmpp-i-08fc29d0a5e5715a2], TT_Log_Product_Token=\[consumer], TT_Log_Traffic_Type=\[public], TT_Log_URI_Name=\[/api/message/message_id]}
> --------------------------------------
> {quote}



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)