>背景:我正在尝试使用 jaxb 和骆驼取消编组 xml 文件。我想我很难接受它,因为我不知道确切地知道会发生什么。
例如,我有:
from("file://C:/test.xml").unmarshal(jaxb).to("file://C:/testEnd.java");
有了这个,我希望看到.java文件中解组的结果(即来自 xml 文件元素的参数和值)。但是,当我运行该程序时,.java文件中没有显示任何内容,但我没有收到任何错误。
编组也会发生同样的事情。当我有一个.java文件作为 from 函数,一个.xml文件作为 to 函数时,没有任何反应。
例如,我有:
from("file://C:/test.java").marshal(jaxb).to("file://C:/testEnd.xml");
由此,我希望看到我的注释 java 文件中的值出现在 xml 文件中。
问题:在这两种情况下,我的期望是否正确?还是这个逻辑有问题?
请尝试以下操作:如果您想在代码中以 xml 的形式保存 java 对象,然后再次使用该 xml 检索之前保存的 java 对象的状态,我们会进行编组和取消编组1)编组:将java对象转换为基于XML并将其保存到文件创建一个 producerTemplate 将 java 对象发送到生产者端点,根据 jaxb dataformat 封送它,它将使用标有 XmlRootElement 的 pojo bean 转换为 xml,并在 jaxb 标签中称为 contextPath。
public class ClientEight {
@Produce(uri="direct:invoice")
ProducerTemplate template;
public static void main(String rgs[]) throws InterruptedException{
AbstractApplicationContext ctx= new ClassPathXmlApplicationContext("resources/camel-configTen.xml");
InvoiceXml invoice= new InvoiceXml("fdf3443",3454, 435345.44f, "hfhfddfdg"); //any java object we are passing
ClientEight client = (ClientEight) ctx.getBean("client");
Object xmlObj= client.template.requestBody(invoice);
System.out.println(xmlObj);
}
上面是一个客户端代码,你用它来将java对象发送到生产者端点,因为你使用的是template.requestBody,所以你正在取回返回的对象。
<camel:camelContext>
<camel:dataFormats>
<!-- path to jaxb annotated class -->
<camel:jaxb id="invoiceJaxb" contextPath="com.java.bean"
prettyPrint="true" />
</camel:dataFormats>
<camel:route>
<camel:from uri="direct:invoice" />
<camel:marshal ref="invoiceJaxb" />
<camel:log message=" ${body}" />
<camel:to uri="file://src/resources?fileName=One.xml"/>
</camel:route>
</camel:camelContext>
这将是您的骆驼配置文件。希望这有帮助
file
组件获取一个目录,并处理此目录中的所有文件。 默认情况下,它不处理文件,您必须使用选项或流组件。
见 http://camel.apache.org/file2.html
仅目录
Camel仅支持配置了 起始目录。因此,目录名称必须是目录。如果你 只想使用单个文件,您可以使用文件名选项, 例如,通过设置文件名=文件名。此外,起始目录 不得包含带有 ${ } 占位符的动态表达式。再次使用 文件名选项,用于指定文件名的动态部分。