我有一个方法,当特定项目发生时将调用该方法,然后使用它发送消息
obj.addMore(xyz);
Exchange returnExchange = producer.send(theEndpoint, new Processor() {
@Override
public void process(Exchange outExchange) throws Exception {
..........
..........
outExchange.getIn().setBody(obj);
}
});
此方法被调用 3 次,当我检查端点上得到的交换时,我发现对于所有 3 次交换,都反射(reflect)了 obj 的最后状态。 IE。; obj(一种数组列表)包含使用 obj.addMore(xyz); 添加的所有字符串。
但我的假设是,对于第一次交换,它应该只包含在第一次调用中添加的一个字符串,第二次交换应该包含两个字符串(在第一次和第二次调用期间添加),依此类推。
可能出现什么问题以及问题出在哪里?还是我的假设是错误的?
最佳答案
每个交换都被赋予相同的对象,以便当您的代码调用时
obj.addMore(xyz)
所有三个交换的正文都将更新。
阻止这种情况发生的一种方法是创建 obj 的副本:
outExchange.getIn().setBody(obj.clone());
关于java - 使用camel中的send方法发送对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21547018/