我想使用 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));
});