我是Apache Camel的新手。我有一个问题,关于如何将方法传递给路由中定义的bean。
我有以下路线定义:
<bean id="myBean" class="camel.MyBean"/>
<camelContext id="testContext" xmlns="http://camel.apache.org/schema/spring">
<route>
<from uri="file:data/inbox?noop=true"/>
<to uri="myBean"/>
<to uri="file:data/outbox"/>
</route>
</camelContext>
MyBean类定义如下:
public class MyBean {
public void myMethod(Exchange exchange) {
System.out.println("MyBean myMethod " + exchange.getIn().toString());
}
}
这很好用,我得到的Exchange包含一个&#34; In message&#34;其中包含该文件。 exchange.getIn().toString()
为我提供了文件名。
如果我重写MyBean并使其成为:
public class MyBean {
public void myMethod1(String string) {
System.out.println("MyBean myMethod1 " + string);
}
}
它也有效。传入的消息以某种方式转换为包含传入文本文件内容的String。
如果我然后重写MyBean并成功:
public class MyBean {
public void myMethod2(Integer integer) {
System.out.println("MyBean myMethod2 " + integer);
}
}
然后它停止了工作。我想这可能是因为Camel无法将文件转换为整数。
然后我有一个问题:尽管Camel在封面下为我们进行了所有类型转换,但我们仍然需要知道它携带的数据类型,以便我们在路由上设计节点。似乎没有规则可循。 Camel的一般规则是什么规定了这种类型转换是如何进行的?
非常感谢。
答案 0 :(得分:0)
首先,系统将被设计为在特定格式下理解输入数据,这意味着将为其他系统(想要通信的人)定义合同。
要回答您的问题,让我们假设您开发的应用程序只能处理XML输入,并且您可能有'N'个用户可能需要使用您的应用程序来处理将以CSV,管道分隔等方式发送数据的人员, 在这种情况下,您必须接收所有这些消息,并根据您必须解析的内容类型并转换为将由您的核心处理器处理的xml消息。在这种情况下,核心处理器实际上进行实际处理。
Camel为此提供了基于Conten的路由器。
点击此链接https://camel.apache.org/content-based-router.html
希望这有帮助
答案 1 :(得分:0)
简短的答案是:
Processor
,那么您可以使用process(exchange)
获取exchange.getIn().getHeader("CamelFilePath")
中正在执行的文件的完整路径名。file
组件的说明,了解设置的标头。为了更深入地了解您所做的事情,请阅读about Type Converter并查看开箱即用的转换器列表。 为了进一步理解camel如何猜测交换体内容与bean方法的匹配,请阅读about Bean Binding。它还允许将标头绑定到带有DSL表达式的参数或带有代码注释的参数。