cxf-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Luke Xu (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (CXF-7459) JAX-RS WebClient.invoke() do not respect Content-Type setting in HTTP-Conduit
Date Mon, 31 Jul 2017 09:28:00 GMT

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

Luke Xu updated CXF-7459:
-------------------------
    Description: 
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 its 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}


  was:
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 lie on this issue. application/x-www-form-urlencoded is
showed in log but if monitoring with third part tool its 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}



> 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
>
> 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 its 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)

Mime
View raw message