我的目标是读取CSV文件,将其转换为JSON,并将生成的JSON逐个发送到JMS队列。验证码:
final BindyCsvDataFormat bindy=new BindyCsvDataFormat(camelproject.EquityFeeds.class);
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
CamelContext _ctx = new DefaultCamelContext();
_ctx.addComponent("jms", JmsComponent.jmsComponentAutoAcknowledge(connectionFactory));
_ctx.addRoutes(new RouteBuilder() {
public void configure() throws Exception {
from("file:src/main/resources?fileName=data-sample.csv")
.unmarshal(bindy)
.marshal()
.json(JsonLibrary.Jackson).log("${body}")
.to("file:src/main/resources/?fileName=emp.json");
}
});
EquityFeeds是上面代码中我的POJO类。
议题:
1.不产生输出。“emp.json”文件不会在给定位置生成。
1.另外,我如何将生成的JSON拆分为单独的JSON,并将其发送到JMS队列,就像我对XML所做的那样,如下所示:
.split(body().tokenizeXML("equityFeeds", null)).streaming().to("jms:queue:xml.upstream.queue");
EquityFeeds(POJO):
@CsvRecord(separator = ",",skipFirstLine = true)
public class EquityFeeds {
@DataField(pos = 1)
private String externalTransactionId;
@DataField(pos = 2)
private String clientId;
@DataField(pos = 3)
private String securityId;
@DataField(pos = 4)
private String transactionType;
@DataField(pos = 5)
private Date transactionDate;
@DataField(pos = 6)
private float marketValue;
@DataField(pos = 7)
private String priorityFlag;
// getters and setters...
}
**请注意:**我注解了.marshal()
和.json()
,以检查.unmarshal()
是否工作,但解组也不工作,因为“emp.json”没有创建。
1条答案
按热度按时间laximzn51#
如果在启动路由时什么都没有发生,那么很可能是由于您传递给文件组件的相对路径。可能Java进程的执行目录不在您认为的位置,并且找不到文件。为了简化问题,我建议你从绝对路径开始。一旦一切正常,找出正确的相对路径(你的基应该是
user.dir
系统属性的值)。关于你的问题分裂的内容:这在documentation中得到了回答。
这对我来说很有用( Camel 3.1):
给定
/tmp/simpsons.csv
中的输入日志输出如下所示
两个JSON文件用
/tmp
编写。