XML 文件到 std:out (格式化) 与 Apache Camel.



我想使用 Apache Camel 打印一个格式化的 XML 文件来控制台:

预期输出为:

XML ->

<client book="Camel in Action" author="4995" title="1"/>

标准:出->

Client
book: Camel in Action
author: 4995
title: 1

我当前的代码:

public class MyRouteBuilder extends RouteBuilder {
@Override
public void configure() throws Exception {
JAXBContext jaxbContext =    
JAXBContext.newInstance(Client.class);
JaxbDataFormat jaxbDataFormat = new  
JaxbDataFormat(jaxbContext);

from("file:/home/tkaczmarek/usr/data/inbox/")
.unmarshal(jaxbDataFormat)
.to("file:/home/tkaczmarek/usr/data/outbox")
.log("${body}");
}
}

客户端.java

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Client {
@XmlAttribute
private String book;
@XmlAttribute
private String author;
@XmlAttribute
private String title;
}

如何获得预期输出?现在它只是打印到 std:out 只是带有标签的 xml 文件:(

好的,所以我不完全明白你在做什么,但是,而不是log(),您可以使用如下所示的bean()来打印未编组的xml并以您想要的任何方式格式化它。

from("file:/home/tkaczmarek/usr/data/inbox/")
.to("file:/home/tkaczmarek/usr/data/outbox")
.bean(XmlToBean.class);

这是XmlToBean类-

public class XmlToBean {
public void transformXmlObject(Client client){
System.out.println(client.toString());
}
}

请注意,我什至没有使用unmarshal(),因为它仅在类路径中需要,除非您有一些特定的要求。如果您认为添加另一个类是矫枉过正的,那么process()也足够了,如下所示-

from("file:/home/tkaczmarek/usr/data/inbox/")
.to("file:/home/tkaczmarek/usr/data/outbox")
.process(exchange -> {
System.out.println(exchange.getIn().getBody(Client.class));
});

最新更新