Hi Ah seems like I finally got it. By specifying all the possible expressions we should support. We can make JAXB generate an optional choice
@XmlElements({ @XmlElement(required = false, name = "simple", type = SimpleExpression.class), @XmlElement(required = false, name = "groovy", type = GroovyExpression.class)} ) private ExpressionDefinition expression; And the XSD <xs:complexType name="sendDefinition" abstract="true"> <xs:complexContent> <xs:extension base="tns:noOutputDefinition"> <xs:sequence> <xs:choice minOccurs="0"> <xs:element ref="tns:simple"/> <xs:element ref="tns:groovy"/> </xs:choice> </xs:sequence> <xs:attribute name="uri" type="xs:string"/> <xs:attribute name="ref" type="xs:string"/> <xs:anyAttribute namespace="##other" processContents="skip"/> </xs:extension> </xs:complexContent> </xs:complexType> So that means we can do <route> <from uri="direct:start"/> <convertBodyTo type="java.lang.Integer"/> <to> <simple>seda:${header.foo}</simple> </to> </route> Which is our dynamic to in XML DSLs. To support his in Java DSL and Scala DSL is possible as well, but requires some methods to be added. On Thu, Jul 28, 2011 at 3:20 PM, Claus Ibsen <claus.ib...@gmail.com> wrote: > Hi > > I just had a peek once again. > JAXB is still limited in how much you can customize it. > > The only way so far I have found for optional expressions is to add to > SendDefinition: > > @XmlElementRef > private List<ExpressionDefinition> expression; > > I have to use a List as JAXB will generate a XSD (see below) > So there is a choice with a minOccurs="0". The problem is that > maxOccurs is unbounded. > And I cannot set a limitation, to 1 or any other value. > > In the XML DSL I can now do > > <route> > <from uri="direct:start"/> > <convertBodyTo type="java.lang.Integer"/> > <to uri="mock:result"/> > <to> > <simple>seda:${header.foo}</simple> > </to> > </route> > > > > > <xs:complexType name="sendDefinition" abstract="true"> > <xs:complexContent> > <xs:extension base="tns:noOutputDefinition"> > <xs:sequence> > <xs:choice minOccurs="0" maxOccurs="unbounded"> > <xs:element ref="tns:expressionDefinition"/> > <xs:element ref="tns:constant"/> > <xs:element ref="tns:el"/> > <xs:element ref="tns:groovy"/> > <xs:element ref="tns:header"/> > <xs:element ref="tns:jxpath"/> > <xs:element ref="tns:javaScript"/> > <xs:element ref="tns:language"/> > <xs:element ref="tns:method"/> > <xs:element ref="tns:mvel"/> > <xs:element ref="tns:ognl"/> > <xs:element ref="tns:php"/> > <xs:element ref="tns:property"/> > <xs:element ref="tns:python"/> > <xs:element ref="tns:ref"/> > <xs:element ref="tns:ruby"/> > <xs:element ref="tns:simple"/> > <xs:element ref="tns:spel"/> > <xs:element ref="tns:sql"/> > <xs:element ref="tns:tokenize"/> > <xs:element ref="tns:xpath"/> > <xs:element ref="tns:xquery"/> > </xs:choice> > </xs:sequence> > <xs:attribute name="uri" type="xs:string"/> > <xs:attribute name="ref" type="xs:string"/> > <xs:anyAttribute namespace="##other" processContents="skip"/> > </xs:extension> > </xs:complexContent> > </xs:complexType> > > > On Thu, Jul 28, 2011 at 2:12 PM, Claus Ibsen <claus.ib...@gmail.com> wrote: >> Hi >> >> Its fairly common for end users of Camel to send a message to an >> endpoint by which the uri is dynamic. >> >> We have a FAQ for that. >> http://camel.apache.org/how-do-i-use-dynamic-uri-in-to.html >> >> However you would need to use the recipient list EIP to support that. >> >> Ben O'Day recently created a ticket to improved this, and on the @user >> a person is asking for this as well. >> https://issues.apache.org/jira/browse/CAMEL-4226 >> >> We may want to try to take a stab at improving this. The problem would >> be to keep being backwards compatible. And at the same time support >> passing in expressions for a to in the DSL. Likewise the DSL may get >> big as we would need to add more methods to the model so you can use >> the expressions. >> >> The bigger problem is JAXB being a bit of an *** in terms of >> flexibility of the generated schema. I remember looking at this years >> ago and it wasn't easy to have JAXB generate a XSD where the >> expression would be optional. There was no good way of specifying this >> in the JAXB annotation in the model class. >> >> But since this could be a good improvement we may want to tamper with >> a special support on ToDefinition to force JAXB to see the expression >> as being optional. >> >> >> With this you could write >> >> from X >> to (simple("xxxx:${header.bar}")) >> >> >> And in XML >> >> <from uri="X"/> >> <to><simple>xxx:${header.bar}</simple></to> >> >> Simple is just one of the many expressions you can use. >> >> >> >> >> >> -- >> Claus Ibsen >> ----------------- >> FuseSource >> Email: cib...@fusesource.com >> Web: http://fusesource.com >> Twitter: davsclaus, fusenews >> Blog: http://davsclaus.blogspot.com/ >> Author of Camel in Action: http://www.manning.com/ibsen/ >> > > > > -- > Claus Ibsen > ----------------- > FuseSource > Email: cib...@fusesource.com > Web: http://fusesource.com > Twitter: davsclaus, fusenews > Blog: http://davsclaus.blogspot.com/ > Author of Camel in Action: http://www.manning.com/ibsen/ > -- Claus Ibsen ----------------- FuseSource Email: cib...@fusesource.com Web: http://fusesource.com Twitter: davsclaus, fusenews Blog: http://davsclaus.blogspot.com/ Author of Camel in Action: http://www.manning.com/ibsen/