Apache camel 如何提取ApacheCamel URI参数

Apache camel 如何提取ApacheCamel URI参数,apache-camel,Apache Camel,有人知道如何从camel URI中提取参数吗? 我有一条这样定义的路线 from("SOME_URI") .to("SOME_URI") .to("bean:myBean?method=myMethod&myParameter1=val1&myParameter2=val2") 我想像这样提取“myMethod”中的参数1和参数2(我正在Grails中实现camel) 谢谢,这是事先准备好的 主要答覆 您可以从exchange中获得您想要的: exchange.getFromE

有人知道如何从camel URI中提取参数吗? 我有一条这样定义的路线

from("SOME_URI")
.to("SOME_URI")
.to("bean:myBean?method=myMethod&myParameter1=val1&myParameter2=val2")
我想像这样提取“myMethod”中的参数1和参数2(我正在Grails中实现camel)

谢谢,这是事先准备好的

主要答覆 您可以从exchange中获得您想要的:

exchange.getFromEndpoint()
将返回由“SOME_URI”定义的端点,并且:

将返回“SOME_URI”的字符串值

这意味着您的代码可能会变成:

def myMethod(def inBody, Exchange exchange){
    def uri = exchange?.fromEndpoint?.endpointUri

    if(uri) {
        String parameter1 = extractParameter(uri, 'myParameter1')
        String parameter2 = extractParameter(uri, 'myParameter2')

       //...rest of code
    }

    return something
}

/*
 * do any kind of processing you want here to manipulate the string
 * and return the parameter. This code should work just fine in grails
 */
def extractParameter(String uri, String parameterName) {
    def m = uri =~ "${parameterName}=([^&]+)"
    return m.find() ? m[0][1] : null
}
如果首选Java等价物,则应执行相同操作:

private static String extractParameter(String uri, String parameterName) {
    Matcher m = Pattern.compile(parameterName + "=([^&]+)").matcher(uri);
    return m.find() ? m.group(1) : null
} 

可供替代的 还要注意的是,根据您要完成的具体任务,更好的方法可能是使用fromF DSL直接向您的路由提供参数。这样,代码中就有了可用的参数,之后就不必担心提取它们了

下面的代码段取自


val1和val2是硬编码值,还是应该是某种动态值,可能来自消息本身

camelbean组件允许您定义绑定,并传入消息中的值或固定值。有关更多详细信息,请访问:


您还需要查看方法签名中的参数数量,以及在camelbean绑定uri中定义的参数数量。它们应该匹配。

如果我理解正确,您正在尝试将参数传递到将要调用的方法中。通常的方法是在
Exchange
对象流经路由时修改它

from("SOME_URI")
.to("SOME_URI")
.setHeader("myParameter1", constant("val1"))
.setHeader("myParameter2", constant("val2"))
.to("bean:myBean?method=myMethod")
在您的方法中,您只需访问
交换
的标题

def myMethod(Exchange exchange) {
    String parameter1 = exchange.getHeader("myParameter1", String.class)
    String parameter2 = exchange.getHeader("myParameter2", String.class)
    //...rest of code
}
或者如果你想用骆驼豆装订

def myMethod(Exchange exchange, 
        @Header("myParameter1") String parameter1,
        @Header("myParameter2") String parameter2) {
    //...rest of code
}
如果这有帮助,请记得投赞成票

from("SOME_URI")
.to("SOME_URI")
.setHeader("myParameter1", constant("val1"))
.setHeader("myParameter2", constant("val2"))
.to("bean:myBean?method=myMethod")
def myMethod(Exchange exchange) {
    String parameter1 = exchange.getHeader("myParameter1", String.class)
    String parameter2 = exchange.getHeader("myParameter2", String.class)
    //...rest of code
}
def myMethod(Exchange exchange, 
        @Header("myParameter1") String parameter1,
        @Header("myParameter2") String parameter2) {
    //...rest of code
}