Hi

Could you try with 2.0m3 there was a fix in the simple language in
relation to use ' ' in the left hand side.

You can also try other combos

${in.header.type} == TYPE1
${out.header.type} == TYPE1

Just to see if you get a match.

If still an issue let me know and if you can create a sample / unit
test that demos it then I can take a look and debug / fix the issue.


On Wed, Jul 29, 2009 at 5:51 PM, msjwhite<[email protected]> wrote:
>
> I have the following route which takes an input message (with header
> type="INPUT") and splits it into two (with header type="TYPE1" and "TYPE2"),
> after which a choice is used to route it to the appropriate endpoint based
> on a 'type' header value set in the splitter.
>
> When using the <simple> expression in the choice it is evaluating the
> original message in each case and not split one and hence checks fail and I
> send to error queue.
>
> When using the same check in an equivalent <javaScript> expression it is
> correctly evaluating the split message in each case and so correctly routes
> to the out queues.
>
> <route>
> <from uri="jms:IN_QUEUE"/>
> <split>
>        <!-- Splits input msg into two; one with header.type=TYPE1 and the 
> other
> with TYPE2 -->
>        <method bean="MySplitter" method="doSplit"/>
>        <choice>
>                <when>
>                        <simple>${header.type} == 'TYPE1'</simple> <!-- why is 
> this not working?
> -->
>                        <!--javaScript>request.headers.get('type') == 
> 'TYPE1'</javaScript-->
>                        <to uri="jms:OUT_QUEUE_1" />
>                </when>
>                <when>
>                        <simple>${header.type} == 'TYPE2'</simple> <!-- why is 
> this not working?
> -->
>                        <!--javaScript>request.headers.get('type') == 
> 'TYPE2'</javaScript-->
>                        <to uri="jms:OUT_QUEUE_2" />
>                </when>
>                <otherwise>
>                        <to uri="jms:ERROR"/>
>                </otherwise>
>        </choice>
> </split>
> </route>
>
> Here is my log and tracer output when using <simple> checks (I added a
> little extra debug output into PredicateBuilder to show what it is exactly
> comparing);
>
> INFO  [RouteTest                     ] - Expected message count
> OUT_QUEUE_1=1, OUT_QUEUE_2=1, ERROR=0
> INFO  [RouteTest                     ] - Sent exchange: Exchange[Message: ]
> INFO  [Logger                        ] - ID-mswxp2-2741-1248881378187-2-0
>>>> jms:IN_QUEUE --> split(), Pattern:InOnly, Headers:{JMSXGroupID=null,
> JMSCorrelationID=null, JMSType=null, JMSExpiration=0,
> JMSMessageID=ID:mswxp2-2739-1248881377921-0:4:1:1:1, JMSRedelivered=false,
> JMSDeliveryMode=2, JMSPriority=4, type=INPUT, JMSReplyTo=null,
> JMSTimestamp=1248881378765, JMSDestination=queue://IN_QUEUE},
> BodyType:String, Body:
> INFO  [Logger                        ] - ID-mswxp2-2741-1248881378187-2-0
>>>> split() --> split(), Pattern:InOnly, Headers:{CamelMulticastIndex=0,
> CamelSplitSize=2, type=TYPE1, CamelSplitIndex=0}, BodyType:String, Body:
> TRACE [PredicateBuilder$6            ] - matches(INPUT==TYPE1)
> TRACE [PredicateBuilder$6            ] - matches(INPUT==TYPE2)
> INFO  [Logger                        ] - ID-mswxp2-2741-1248881378187-2-0
>>>> split() --> otherwise(jms:ERROR), Pattern:InOnly,
> Headers:{CamelMulticastIndex=0, CamelSplitSize=2, type=TYPE1,
> CamelSplitIndex=0}, BodyType:String, Body:
> INFO  [Logger                        ] - ID-mswxp2-2741-1248881378187-2-0
>>>> otherwise(jms:ERROR) --> split(), Pattern:InOnly,
> Headers:{CamelMulticastIndex=1, CamelSplitSize=2, type=TYPE2,
> CamelSplitIndex=1}, BodyType:String, Body:
> TRACE [PredicateBuilder$6            ] - matches(INPUT==TYPE1)
> TRACE [PredicateBuilder$6            ] - matches(INPUT==TYPE2)
> INFO  [Logger                        ] - ID-mswxp2-2741-1248881378187-2-0
>>>> split() --> otherwise(jms:ERROR), Pattern:InOnly,
> Headers:{CamelMulticastIndex=1, CamelSplitSize=2, type=TYPE2,
> CamelSplitIndex=1}, BodyType:String, Body:
> INFO  [RouteTest                     ] - Got message count OUT_QUEUE_1=0,
> OUT_QUEUE_2=0, ERROR=2
>
>
> and here is the same test when using <javaScript> checks;
>
>
> INFO  [RouteTest                     ] - Expected message count
> OUT_QUEUE_1=1, OUT_QUEUE_2=1, ERROR=0
> INFO  [RouteTest                     ] - Sent exchange: Exchange[Message: ]
> INFO  [Logger                        ] - ID-mswxp2-2801-1248882234296-2-0
>>>> jms:IN_QUEUE --> split(), Pattern:InOnly, Headers:{JMSXGroupID=null,
> JMSCorrelationID=null, JMSType=null, JMSExpiration=0,
> JMSMessageID=ID:mswxp2-2799-1248882234046-0:4:1:1:1, JMSRedelivered=false,
> JMSDeliveryMode=2, JMSPriority=4, type=INPUT, JMSReplyTo=null,
> JMSTimestamp=1248882234890, JMSDestination=queue://IN_QUEUE},
> BodyType:String, Body:
> INFO  [Logger                        ] - ID-mswxp2-2801-1248882234296-2-0
>>>> split() --> split(), Pattern:InOnly, Headers:{CamelMulticastIndex=0,
> CamelSplitSize=2, type=TYPE1, CamelSplitIndex=0}, BodyType:String, Body:
> INFO  [Logger                        ] - ID-mswxp2-2801-1248882234296-2-0
>>>> split() --> when(request.headers.get('type') == 'TYPE1'),
> Pattern:InOnly, Headers:{CamelMulticastIndex=0, CamelSplitSize=2,
> type=TYPE1, CamelSplitIndex=0}, BodyType:String, Body:
> INFO  [Logger                        ] - ID-mswxp2-2801-1248882234296-2-0
>>>> when(request.headers.get('type') == 'TYPE1') --> split(),
> Pattern:InOnly, Headers:{CamelMulticastIndex=1, CamelSplitSize=2,
> type=TYPE2, CamelSplitIndex=1}, BodyType:String, Body:
> INFO  [Logger                        ] - ID-mswxp2-2801-1248882234296-2-0
>>>> split() --> when(request.headers.get('type') == 'TYPE2'),
> Pattern:InOnly, Headers:{CamelMulticastIndex=1, CamelSplitSize=2,
> type=TYPE2, CamelSplitIndex=1}, BodyType:String, Body:
> INFO  [RouteTest                     ] - Got message count OUT_QUEUE_1=1,
> OUT_QUEUE_2=1, ERROR=0
>
>
> This is causing us to not be able to use the Simple language header
> checking, which is a shame because of the simplicity and the performance
> benefits it provides.
>
> Am I doing something dumb here, or does this look like an issue I should
> raise?  I'm using 2.0-M2, btw.
>
> Thanks
> Mark
> --
> View this message in context: 
> http://www.nabble.com/Simple-language-checks-failing-after-split-tp24722130p24722130.html
> Sent from the Camel - Users mailing list archive at Nabble.com.
>
>



-- 
Claus Ibsen
Apache Camel Committer

Open Source Integration: http://fusesource.com
Blog: http://davsclaus.blogspot.com/
Twitter: http://twitter.com/davsclaus

Reply via email to