Camel Jetty响应是Object ID而不是JAXB生成的XML

时间:2014-04-24 23:19:33

标签: jaxb apache-camel

我正在开发一个Apache Camel项目。基本上,Jetty端点接受Http Post请求,并且消息在路由中经历了几个转换步骤。转换的最后一步是通过JAXB,它将Java对象转换为XML。 Java DSL位于

之下
final DataFormat jaxb = new JaxbDataFormat("sample");
from("jetty:http://localhost:8888/foo")
.unmarshal(format).split(body()).marshal(jaxb)

我的问题是,当我向localhost URL发送POST请求时,HTTP响应是字符串 [sample.Claims@b68e0e] ,而不是我期望的XML。这是JAXB对象ID。当我将DSL更改为

from("jetty:http://localhost:8888/foo")
.unmarshal(format).split(body()).marshal(jaxb).to("stream:out")

我可以在stdout中看到正确的XML打印输出。我不知道如何使HTTP响应包含XML而不是Object 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");

但它似乎没有任何区别。我仍然将[sample.Claims@1a631c2]作为Http响应体,而stdout打印出正确的xml文档。我不确定如何/何时设置jetty端点的响应体。

1 个答案:

答案 0 :(得分:0)

我通过将聚合策略作为拆分的第二个参数来实现。有关详细信息,请参阅https://camel.apache.org/splitter.html。搜索" 拆分聚合请求/回复示例"