When using Fuse Mediation Router 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 Bean Integration in Implementing Enterprise Integration Patterns.
Table 19.1 shows the namespaces that are
predefined for XPath. You can use these namespace prefixes in the XPath
expression that appears in the @XPath
annotation.
Table 19.1. Predefined Namespaces for @XPath
Namespace URI | Prefix |
---|---|
http://www.w3.org/2001/XMLSchema | xsd |
http://www.w3.org/2003/05/soap-envelope | soap |
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, ) { ... } ... }