camel-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ASF GitHub Bot (JIRA)" <>
Subject [jira] [Commented] (CAMEL-12252) Dynamic setting the DESTINATION_OVERRIDE_URL doesn't work on CXFRS producer
Date Thu, 22 Feb 2018 21:46:01 GMT


ASF GitHub Bot commented on CAMEL-12252:

aldettinger commented on issue #2218: fix CAMEL-12252 and add test case for it
   In the case at hand, each call to [createJAXRSClientFactoryBean(...)](
always return the same client factory bean instance but with an overridden address. We end
up in a situation where [ClientFactoryBeanCache.get(address)](
could serve a factory bean with another address than requested.
   The `createJAXRSClientFactoryBean(...)` implementation was tweaked when [the rsClient scope
changed to prototype]( But now, we have
a single client factory bean since [the SpringRsEndpoint became a singleton](
   Keeping in mind thread safety, I would explore how to change [newJAXRSClientFactoryBean(...)`](
in order to make the cache keep references to immutable client factory bean**s**.
   Does it make sense ?

This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:

> Dynamic setting the DESTINATION_OVERRIDE_URL doesn't work on CXFRS producer
> ---------------------------------------------------------------------------
>                 Key: CAMEL-12252
>                 URL:
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-cxfrs
>    Affects Versions: 2.17.0, 2.18.5, 2.19.4, 2.20.2
>         Environment: Java 8
>            Reporter: Xilai Dai
>            Priority: Major
> Given the sample MyProcessor, setting the DESTINATION_OVERRIDE_URL dynamically during
the invoke:
> {code}
> public void process(Exchange exchange) throws Exception {
>     String env = (String)exchange.getIn().getHeader("Environnement");
>     if (env.equalsIgnoreCase("DEV")) {
>         exchange.getIn().setHeader(exchange.DESTINATION_OVERRIDE_URL,
>             "http://esbdev11.local:8080/server1/metaServlet");
>     } else {
>         exchange.getIn().setHeader(exchange.DESTINATION_OVERRIDE_URL,
>             "http://esblab11.local:8080/server2/metaServlet");
>     }
> }
> {code}
> Given the sample Route:
> {code}
>         from("cxfrs:bean:MyREST")
>         .process(new HeaderProcessor())
>         .setHeader("Environnement")
>         .simple("${header.http_query[env][0]}")
>         .process(new MyProcessor())
>         .setHeader(org.apache.camel.Exchange.HTTP_METHOD, constant("GET"))
>         .setHeader(org.apache.camel.Exchange.ACCEPT_CONTENT_TYPE, constant("*/*"))
>         .setHeader(org.apache.camel.Exchange.HTTP_PATH, constant("/"))
>         .to("cxfrs:bean:restClient?maxClientCacheSize=5");
> {code}
> Send request to cxfrs:bean:MyREST with different http header "dev", then the cxfrs:bean:restClient
always make call to the last setting Address.
> (Only it works as expected when setting maxClientCacheSize=0 on the cxfrs:bean:restClient)
> There is no this issue on Camel 2.16.x, but start problem from Camel 2.17.x and later
versions. Investigations show that the CxfRsEndpoint becoming Singleton after CAMEL-9628,
that explain why the last Address setting always applied.

This message was sent by Atlassian JIRA

View raw message