2016-02-04 104 views
1

背景: 我想解开使用jaxb和骆驼的xml文件。我觉得我很难与它,因为我不知道什么期望文件。骆驼路线逻辑/输出预期

例如,我有:

from("file://C:/test.xml").unmarshal(jaxb).to("file://C:/testEnd.java"); 

就这样,我希望看到在java文件解组的结果(即参数和值从XML文件中的元素)。但是,当我运行该程序时,没有在.java文件中显示,但我没有收到任何错误。

同样的事情发生在编组。当我有一个.java文件作为from函数和to函数中的.xml文件时,什么也不会发生。

例如,我有:

from("file://C:/test.java").marshal(jaxb).to("file://C:/testEnd.xml"); 

从此,我希望从我的注释的Java文件中看到的值出现在XML文件中。

问题: 我对这两种情况的期望是正确的吗?或者这种逻辑有什么问题?如果在你的代码要保存Java对象以XML的形式 ,然后再使用XML来检索先前保存的java对象的状态,我们就打包和解包 1):

+0

我会跳过jaxb,如果可能的话使用jacksonxml,如此处所述。更易于使用。 http://camel.apache.org/jackson-xml.html,您还需要定义一个.jaxb文件并定义您的jaxb类。 –

回答

1

请试试这个编组:将java对象转换为基于xml的文件并将其保存到文件 创建一个producerTemplate,将java对象发送到producerendpoint,按照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); 
} 

以上是其中U使用到Java对象发送到生产者端点,因为ü使用template.requestBody,U正重新返回的对象客户端代码。

<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> 

这将是你的骆驼配置文件。希望这可以帮助

+0

感谢您的回复。我如何定义jaxb和uri(direct:invoice)是什么?我在pojo中做到这一点吗? – JustBlossom

+1

直接:发票是由您在其上通过producertemplate发送消息的u创建的终端,如clientEight类代码所示。 U不需要做任何其他配置,jaxb再次是一个已经在camel中定义的组件。请参阅骆驼食谱,这是一本很好的书 –

0

file组件获取一个目录,并处理该目录中的所有文件。它不会默认处理文件,您必须使用选项或流组件。

看到http://camel.apache.org/file2.html

只有目录

骆驼只支持用 起始目录配置端点。所以directoryName必须是一个目录。如果您要使用 仅使用单个文件,则可以使用fileName选项 (例如,通过设置fileName = thefilename。此外,起始目录 不得包含具有$ {}占位符的动态表达式。再次使用 fileName选项指定文件名的动态部分。