Java 驼峰路线逻辑/输出预期
背景: 我正在尝试使用jaxb和camel解组xml文件。我想我很难接受它,因为我不知道从文件的角度来看,我到底期待什么 例如,我有: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文件元素的参
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中定义的组件。请参考骆驼食谱,这是一本好书