首页 > 解决方案 > POJO中的编码与Camel中的XML转换

问题描述

我们已经非常成功地在 Camel 中执行 POJO 到 XML 的转换。下面的代码举例说明了我们如何使用 Camel 的一个典型案例。我们的应用程序监听 Oracle AQ。队列条目是一个 xml 字符串。然后将 xml 转换为 POJO 类(MyClass),然后我们使用来自其他源的数据对 MyClass 进行一些转换。经过这个转换,POJO对象被转换回字符串并发送到其他系统(这里我们保存到文件)

<route id="testing">

<from uri="oracleaq:queue:FUSEQUEUE"/>  

<convertBodyTo type="generated.MyClass"/>

<bean ref="mainReqprocessor" method="Modify"/>
<convertBodyTo type="java.lang.String"/>
<setHeader headerName="Exchange.FILE_NAME">
    <simple>output.xml</simple>
 </setHeader>
 <to uri="file:C:\\Temp\\OUT"/>
</route>

直到昨天,当我们将 html 标记引入 POJO 类的文本字段之一时,一切正常。我们用 CData "<![CDATA[" + str + "]]>" 包裹了文本。但是,当 POJO 转换为字符串时,编码仍然发生在 CGata 部分的开始和结束括号上,如下所示。因此,生成的 xml 字符串不再是有效的 xml,因此无法将其转换回 MyClass 以供其他应用程序使用。这不是期望的行为。如何避免 CDATA 开始和结束括号的编码?[注意:cdata 中的第一个 < 和最后一个 > 被编码。]

<TEXT>

&amp;lt;![CDATA[&amp;lt;html&amp;gt;&amp;lt;div&amp;gt;&amp;lt;pre&amp;gt;COMPONENT PARTS.&amp;lt;/br&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/html&amp;gt;]]&amp;gt;

<\/TEXT>

标签: xml-parsingapache-camelpojocamel-cxf

解决方案


尽管您有编组/解组的问题,但您没有提及如何将 XML 转换为 POJO 并返回。这将是一个非常重要的信息,可以提供帮助。

如果您使用 JAXB 进行转换,此 Q/A 可能会对您有所帮助: JAXB Marshalling Unmarshalling with CDATA


推荐阅读