主要答案
你可以从交易所中得到你想要的东西:
exchange.getFromEndpoint()
将返回由“SOME_URI”定义的端点,并且:
exchange.getFromEndpoint().getEndpointUri()
将返回“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 直接为您的路线提供参数。这样一来,您就可以在代码中使用这些参数,之后您就不必担心提取它们了。
下面的代码片段取自FromF 的 Camel 文档。
fromF("file://%s?include=%s", path, pattern).toF("mock:%s", result);