Fuse 6 is no longer supported
As of February 2025, Red Hat Fuse 6 is no longer supported. If you are using Fuse 6, please upgrade to Red Hat build of Apache Camel.此内容没有您所选择的语言版本。
32.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 32.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, ) { ... } ... }