You should put the value of your order.getProduct() in a header and use it like that ::
from("direct:start")
.choice()
.when(header("product").isEqualTo(Product.Widget))
.to("direct:widgets")
.when(header("product").isEqualTo(Product.Fizz))
.to("direct:fizzes")
.otherwise()
.to("direct:allOtherProducts");
EDIT :
You could use a process (i.e : in DSL ) :
<route id="foo">
<from uri="direct:start"/>
<process ref="beanProcessor" />
<choice>
<when>
...
</when>
<when>
...
</when>
<otherwise>
...
</otherwise>
</choice>
Bean declaration :
<bean id="beanProcessor" class="MyProcessor" />
The class :
public class MyProcessorimplements Processor {
@Override
public void process(Exchange exchange) throws Exception {
exchange.getIn().setHeader("headerName", yourOrderObject);
}
}