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