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

Claus Ibsen updated CAMEL-7705:
-------------------------------
    Fix Version/s: 2.15.0
                   2.14.2
                   2.13.4

> DynamicRouter hangs thread after bean binding failure
> -----------------------------------------------------
>
>                 Key: CAMEL-7705
>                 URL: https://issues.apache.org/jira/browse/CAMEL-7705
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-core
>    Affects Versions: 2.13.2
>            Reporter: Niels Bertram
>             Fix For: 2.13.4, 2.14.2, 2.15.0
>
>         Attachments: camel-dynamic-router-zombie.zip
>
>
> I have come across a rather complex problem that results in servicemix going 
> into a limbo state not allowing me to deinstall or reinstall the camel 
> context that causes the issue. I replicated the issue in a camel blueprint 
> test with a very scaled down version of the actual implementation - just 
> enough to show how and why it fails (see attached zip of the maven project).
> Here is how it works (or better does not work):
> The example contains a route called {{SessionResourceRoute}} that simply 
> accepts a message payload and hands it over to a bean called 
> {{DynamicSourceRouter}} which has a route method annotated with 
> {{@DynamicRouter}}.
> The routing slip method looks something like that (full detail in code 
> attached):
> {code:java}
> @DynamicRouter
> public String route(
>   @Header(Exchange.SLIP_ENDPOINT) String previous,
>   @Header(SOURCE_ADAPTER) String sourceAdapter,
>   @XPath(value = "/child::node()/local-name()") String messageType,
>   @XPath(value = "/child::node()/@version") String messageVersion,
>   Exchange exchange) {
>   ...
> {code}
> The "logic" within the dynamic router will resolve to send the payload onto 
> another route defined in {{OneSessionResourceRoute}}. This route will send 
> the request message to a CXF endpoint that is configured to return a soap 
> fault.
> When the cxf route fails, the dynamic route method on the 
> {{DynamicSourceRouter}} is called again to work out if there are others that 
> need to be called. Unfortunately when the route returns from the CXF the 
> message is the CXFPayload containing the soap fault and when camel tries to 
> extract the XPath values out of the failed exchange, itself will fall over 
> and then the thread just hangs.
> I understand that this is fixable but I simply like to point out that the 
> dynamic router will make the context thread hang and in my case turns 
> servicemix into a wobble. It also is not very intuitive for someone not as 
> well versed with camel as to what actually is happening.
> To replicate the issue, simply run the maven project as
> {{mvn clean test}}
> OR manually 
> - import 
> {{\[project.basedir\]/src/test/resources/SessionResourceMock-soapui-project.xml}}
>  into SoapUI and start the mock
> - use your favourite IBE to run unit test 
> {{SessionResourceManagerFailureTest}}
> You will see that the test has to be stopped with CTRL+C or Z or you'll have 
> to kill the test process in the IDE ...



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to