You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "Pascal Schumacher (JIRA)" <ji...@apache.org> on 2018/02/09 10:29:00 UTC

[jira] [Updated] (CAMEL-12249) Camel-JMS: transferExchange - send ExchangeProperties can not be accessed before first endpoint in route

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

Pascal Schumacher updated CAMEL-12249:
--------------------------------------
    Description: 
I am using Camel 2.20.2 and ActiveMQ 5.14.5 with the _transferExchange_ option enabled. When I read a message from a queue the send custom _ExchangeProperties_ are not set. After the exchange is routed to the first endpoint the send _ExchangeProperties_ are set.

Unittest to replicate:

{code:java}
public class JmsTransferExchangeAccessExchangePropertiesBeforeFirstEndpointTest extends CamelTestSupport {

    @Test
    public void testSendExchangeAndAccessExchangePropertiesBeforeFirstEndpoint() throws Exception {
        MockEndpoint mock = getMockEndpoint("mock:result");
        mock.expectedBodiesReceived("Hello World");
        mock.expectedPropertyReceived("bar", 123);

        template.send("direct:start", new Processor() {

            public void process(Exchange exchange) throws Exception {
                exchange.getIn().setBody("Hello World");
                exchange.setProperty("bar", 123);
            }
        });

        assertMockEndpointsSatisfied();
    }

    @Override
    protected RouteBuilder createRouteBuilder() throws Exception {
        return new RouteBuilder() {

            @Override
            public void configure() throws Exception {
                from("direct:start").to(getUri());
                from(getUri())
                        // .to("log:debug") this line has uncommented to make the test pass
                        .choice().when(exchangeProperty("bar").isEqualTo(123)).to("mock:result");
            }
        };
    }
    
    protected String getUri() {
        return "activemq:queue:foo?transferExchange=true";
    }

    protected CamelContext createCamelContext() throws Exception {
        CamelContext camelContext = super.createCamelContext();

        ConnectionFactory connectionFactory = CamelJmsTestHelper.createConnectionFactory();
        camelContext.addComponent("activemq", jmsComponentAutoAcknowledge(connectionFactory));
        return camelContext;
    }
}
{code}

The test fails, but if I uncomment the _.to("log:debug")_ line it passes.

The test also fails with current master of camel.

  was:
I am using Camel 2.20.2 and ActiveMQ 5.14.5 with the _transferExchange_ option enabled. When I read a message from a queue the send custom _ExchangeProperties_ are not set. After the exchange is routed to the first endpoint the send _ExchangeProperties_ are set.

Unittest to replicate:

{code:java}
public class JmsTransferExchangeAccessExchangePropertiesBeforeFirstEndpointTest extends CamelTestSupport {

    @Test
    public void testSendExchangeAndAccessExchangePropertiesBeforeFirstEndpoint() throws Exception {
        MockEndpoint mock = getMockEndpoint("mock:result");
        mock.expectedBodiesReceived("Hello World");
        mock.expectedPropertyReceived("bar", 123);

        template.send("direct:start", new Processor() {

            public void process(Exchange exchange) throws Exception {
                exchange.getIn().setBody("Hello World");
                exchange.setProperty("bar", 123);
            }
        });

        assertMockEndpointsSatisfied();
    }

    @Override
    protected RouteBuilder createRouteBuilder() throws Exception {
        return new RouteBuilder() {

            @Override
            public void configure() throws Exception {
                from("direct:start").to(getUri());
                from(getUri())
                        // .to("log:debug") this line has uncommented to make the test pass
                        .choice().when(exchangeProperty("bar").isEqualTo(123)).to("mock:result");
            }
        };
    }
    
    protected String getUri() {
        return "activemq:queue:foo?transferExchange=true";
    }

    protected CamelContext createCamelContext() throws Exception {
        CamelContext camelContext = super.createCamelContext();

        ConnectionFactory connectionFactory = CamelJmsTestHelper.createConnectionFactory();
        camelContext.addComponent("activemq", jmsComponentAutoAcknowledge(connectionFactory));
        return camelContext;
    }
}
{code}

The test fails, but if I uncomment the __.to("log:debug")__ line it passes.

The test also fails with current master of camel.


> Camel-JMS: transferExchange - send ExchangeProperties can not be accessed before first endpoint in route
> --------------------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-12249
>                 URL: https://issues.apache.org/jira/browse/CAMEL-12249
>             Project: Camel
>          Issue Type: Bug
>          Components: came-jms
>    Affects Versions: 2.20.2
>            Reporter: Pascal Schumacher
>            Priority: Major
>
> I am using Camel 2.20.2 and ActiveMQ 5.14.5 with the _transferExchange_ option enabled. When I read a message from a queue the send custom _ExchangeProperties_ are not set. After the exchange is routed to the first endpoint the send _ExchangeProperties_ are set.
> Unittest to replicate:
> {code:java}
> public class JmsTransferExchangeAccessExchangePropertiesBeforeFirstEndpointTest extends CamelTestSupport {
>     @Test
>     public void testSendExchangeAndAccessExchangePropertiesBeforeFirstEndpoint() throws Exception {
>         MockEndpoint mock = getMockEndpoint("mock:result");
>         mock.expectedBodiesReceived("Hello World");
>         mock.expectedPropertyReceived("bar", 123);
>         template.send("direct:start", new Processor() {
>             public void process(Exchange exchange) throws Exception {
>                 exchange.getIn().setBody("Hello World");
>                 exchange.setProperty("bar", 123);
>             }
>         });
>         assertMockEndpointsSatisfied();
>     }
>     @Override
>     protected RouteBuilder createRouteBuilder() throws Exception {
>         return new RouteBuilder() {
>             @Override
>             public void configure() throws Exception {
>                 from("direct:start").to(getUri());
>                 from(getUri())
>                         // .to("log:debug") this line has uncommented to make the test pass
>                         .choice().when(exchangeProperty("bar").isEqualTo(123)).to("mock:result");
>             }
>         };
>     }
>     
>     protected String getUri() {
>         return "activemq:queue:foo?transferExchange=true";
>     }
>     protected CamelContext createCamelContext() throws Exception {
>         CamelContext camelContext = super.createCamelContext();
>         ConnectionFactory connectionFactory = CamelJmsTestHelper.createConnectionFactory();
>         camelContext.addComponent("activemq", jmsComponentAutoAcknowledge(connectionFactory));
>         return camelContext;
>     }
> }
> {code}
> The test fails, but if I uncomment the _.to("log:debug")_ line it passes.
> The test also fails with current master of camel.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)