Java 在camel中使用send方法发送对象

Java 在camel中使用send方法发送对象,java,apache-camel,Java,Apache Camel,我有一个方法,当特定于项目的事情发生时,它将被调用,然后使用 obj.addMore(xyz); Exchange returnExchange = producer.send(theEndpoint, new Processor() { @Override public void process(Exchange outExchange) throws Exception { .......... .......... outExchange.getIn(

我有一个方法,当特定于项目的事情发生时,它将被调用,然后使用

obj.addMore(xyz);
Exchange returnExchange = producer.send(theEndpoint, new Processor() {
@Override
public void process(Exchange outExchange) throws Exception {
       ..........
       ..........
     outExchange.getIn().setBody(obj);
  }                             
});
这个方法被调用了3次,当我检查端点上的交换时,我看到所有3次交换都反映了obj的最后一个状态。即。;obj(数组列表的种类)包含使用obj.addMore(xyz);;添加的所有字符串

但我的假设是,对于第一次交换,它应该只包含在第一次调用中添加的一个字符串,第二次交换应该包含两个字符串(在第一次和第二次调用中添加),依此类推


哪里可能出错,哪里可能出错?或者我的假设是错误的?

从给出的小样本代码来看,似乎您已经将obj定义为处理器代码之外的共享实例变量,因此每次交换中都会出现对同一对象的引用,这就是为什么每条消息的正文总是显示相同的值


如果要确保主体在时间上表示特定的状态,则每次都应在进程方法中创建一个新(或克隆)对象。

每次交换都被赋予相同的对象,以便在代码调用时

obj.addMore(xyz)
所有三个交易所的机构都将更新

阻止这种情况发生的一种方法是创建obj的副本:

outExchange.getIn().setBody(obj.clone());