29.3. XPath Injection
Parameter binding annotation
When using Apache Camel bean integration to invoke a method on a Java bean, you can use the
@XPath
annotation to extract a value from the exchange and bind it to a method parameter.
For example, consider the following route fragment, which invokes the
credit
method on an AccountService
object:
from("queue:payments") .beanRef("accountService","credit") ...
The
credit
method uses parameter binding annotations to extract relevant data from the message body and inject it into its parameters, as follows:
public class AccountService { ... public void credit( @XPath("/transaction/transfer/receiver/text()") String name, @XPath("/transaction/transfer/amount/text()") String amount ) { ... } ... }
For more information about bean integration, see Section 2.4, “Bean Integration”.
Namespaces
Table 29.1, “Predefined Namespaces for @XPath” shows the namespaces that are predefined for XPath. You can use these namespace prefixes in the
XPath
expression that appears in the @XPath
annotation.
Namespace URI | Prefix |
---|---|
http://www.w3.org/2001/XMLSchema | xsd |
http://www.w3.org/2003/05/soap-envelope | soap |
Custom namespaces
You can use the
@NamespacePrefix
annotation to define custom XML namespaces. Invoke the @NamespacePrefix
annotation to initialize the namespaces
argument of the @XPath
annotation. The namespaces defined by @NamespacePrefix
can then be used in the @XPath
annotation's expression value.
For example, to associate the prefix,
ex
, with the custom namespace, http://fusesource.com/examples
, invoke the @XPath
annotation as follows:
public class AccountService { ... public void credit( @XPath( value = "/ex:transaction/ex:transfer/ex:receiver/text()", namespaces = @NamespacePrefix( prefix = "ex", uri = "http://fusesource.com/examples" ) ) String name, @XPath( value = "/ex:transaction/ex:transfer/ex:amount/text()", namespaces = @NamespacePrefix( prefix = "ex", uri = "http://fusesource.com/examples" ) ) String amount, ) { ... } ... }