骆驼码头响应是对象ID,而不是JAXB生成的XML

骆驼码头响应是对象ID,而不是JAXB生成的XML,jaxb,apache-camel,Jaxb,Apache Camel,我正在从事一个Apache Camel项目。基本上,Jetty端点接受Http Post请求,消息在路由中经过几个转换步骤。转换的最后一步是通过JAXB,它将Java对象转换为XML。下面是JavaDSL final DataFormat jaxb = new JaxbDataFormat("sample"); from("jetty:http://localhost:8888/foo") .unmarshal(format).split(body()).marshal(jaxb) 我的问题是

我正在从事一个Apache Camel项目。基本上,Jetty端点接受Http Post请求,消息在路由中经过几个转换步骤。转换的最后一步是通过JAXB,它将Java对象转换为XML。下面是JavaDSL

final DataFormat jaxb = new JaxbDataFormat("sample");
from("jetty:http://localhost:8888/foo")
.unmarshal(format).split(body()).marshal(jaxb)
我的问题是,当我向localhost URL发送POST请求时,HTTP响应是字符串 [样本。Claims@b68e0e],而不是我所期望的XML。这是JAXB对象ID

from("jetty:http://localhost:8888/foo")
.unmarshal(format).split(body()).marshal(jaxb).to("stream:out")
我可以看到XML在标准输出中正确打印出来。我不知道如何使HTTP响应包含XML而不是对象ID。欢迎提供任何帮助

更新:

我想澄清我试图实现的目标。我需要将带分隔符的字符串转换为xml文档。发送到Jetty端点的post消息是一个带分隔符的字符串。路由首先使用BeanIO将字符串转换为POJO,并使用JAXB将POJO转换为XML。即使post消息是单行字符串,我也必须使用split,因为BeanIO默认处理多行平面文件。我遵循@Peter的建议,在jaxb编组之后添加aggegate,如下所示

from("jetty:http://localhost:8888/transformProxy/ECSProxy")
.unmarshal(format).split(body()).marshal(jaxb)
.aggregate(constant("1"),new MyAggregationStrategy())
.completionSize(1).to("stream:out");

但这似乎没有任何区别。我仍然得到[样品]。Claims@1a631c2]作为Http响应主体,而标准输出输出正确的xml文档。我不确定如何/何时设置jetty端点的响应主体

我将聚合策略作为拆分的第二个参数,从而使其发挥作用。详情请参阅。搜索拆分聚合请求/答复示例

是否尝试在编组为XML后添加convertBodyToString.class?正文拆分为单个部分,但拆分未聚合。也许这就是问题所在。@Ralf我尝试了converBodyTo方法,但没有任何帮助。结果仍然是客观的。但是谢谢你的建议。@Peter谢谢你的回复。我将聚合添加到marshaljaxb之后,作为marshaljaxb.aggregateconstant1,新的MyAggregationStrategy.completionSize1.tostream:out。问题是一样的。标准输出输出正确的xml,而Jetty响应只显示[sample]。Claims@1a631c2]