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,
)
{
...
}
...
}







