Java 驼峰路线逻辑/输出预期

Java 驼峰路线逻辑/输出预期,java,jaxb,apache-camel,marshalling,unmarshalling,Java,Jaxb,Apache Camel,Marshalling,Unmarshalling,背景: 我正在尝试使用jaxb和camel解组xml文件。我想我很难接受它,因为我不知道从文件的角度来看,我到底期待什么 例如,我有: from("file://C:/test.xml").unmarshal(jaxb).to("file://C:/testEnd.java"); from("file://C:/test.java").marshal(jaxb).to("file://C:/testEnd.xml"); 这样,我就可以在.java文件中看到解组的结果(即来自xml文件元素的参

背景: 我正在尝试使用jaxb和camel解组xml文件。我想我很难接受它,因为我不知道从文件的角度来看,我到底期待什么

例如,我有:

from("file://C:/test.xml").unmarshal(jaxb).to("file://C:/testEnd.java");
from("file://C:/test.java").marshal(jaxb).to("file://C:/testEnd.xml");
这样,我就可以在.java文件中看到解组的结果(即来自xml文件元素的参数和值)。但是,当我运行程序时,.java文件中没有显示任何内容,但我没有收到任何错误

编组也会发生同样的情况。当我将.java文件作为from函数,将.xml文件作为to函数时,什么也不会发生

例如,我有:

from("file://C:/test.xml").unmarshal(jaxb).to("file://C:/testEnd.java");
from("file://C:/test.java").marshal(jaxb).to("file://C:/testEnd.xml");
因此,我希望看到带注释的java文件中的值出现在xml文件中

问题: 我对这两种情况的期望是否正确?或者这种逻辑有问题吗?

请尝试以下方法: 如果在代码中希望以xml的形式保存java对象,然后再次使用该xml检索先前保存的java对象的状态,我们将进行编组和解编组 1) 编组:将java对象转换为基于xml的对象并将其保存到文件 创建一个producerTemplate,将java对象发送到producerendpoint,根据jaxb数据格式封送它,然后使用标记为XmlRootElement并在jaxb标记中称为contextPath的pojo bean将其转换为xml

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>


这将是您的camel配置文件。希望这有助于
文件
组件获取一个目录,并处理该目录中的所有文件。默认情况下,它不处理文件,您必须使用选项或流组件

仅目录

Camel仅支持配置了 正在启动目录。因此directoryName必须是一个目录。如果你 如果只想使用单个文件,可以使用fileName选项, e、 g.通过设置fileName=fileName。还有,起始目录 不能包含带有${}占位符的动态表达式。再利用 指定文件名动态部分的文件名选项


我将跳过jaxb,如果可能的话,按照这里的解释使用jacksonxml。更容易使用,您还需要定义一个.jaxb文件并定义您的jaxb类。谢谢您的回复。如何定义jaxb和uri(direct:invoice)是什么?我在pojo中可以这样做吗?Direct:invoice是一个由u创建的端点,u在其上通过producertemplate发送消息,如clientEight类代码所示。您不需要进行任何其他配置,jaxb也是一个已经在camel中定义的组件。请参考骆驼食谱,这是一本好书