使用camel-xmljson JAR将XML字符串转换为JSON字符串时如何省略字段

时间:2016-07-19 06:57:14

标签: json apache-camel

 XmlJsonDataFormat xmlJsonFormat = new XmlJsonDataFormat();
 xmlJsonFormat.setEncoding("UTF-8");
 xmlJsonFormat.setForceTopLevelObject(true);
 xmlJsonFormat.setTrimSpaces(true);
 xmlJsonFormat.setSkipNamespaces(true);
 xmlJsonFormat.setRemoveNamespacePrefixes(true);

从源目录中汇集XML文件,并在将其发送到目标目录之前将其转换为JSON格式

 from("file:/inn?noop=true").marshal(xmlJsonFormat)
                .setHeader(Exchange.FILE_NAME, simple("${file:onlyname.noext}.json"))
                .to("file:/out").end();

当我想要一个不使用POJO的XML的JSON字符串时,它很有用。

但现在考虑一个XML,我想省略一个元素。 我应该使用另一个lib而不是camel-xmljson吗? 这是实现它的正确方法:

  1. JAXB lib从XML获取POJO
  2. Jackson lib从POJO获取JSON并从编组中排除POJO字段

2 个答案:

答案 0 :(得分:0)

我明白,即使我会尽量避免在骆驼路线中使用任何POJO。

话虽如此,我不会直接让XML出来。我会在xmljson组件之后放一个XSLT,这样我就可以修剪xml以获得所需的输出。

答案 1 :(得分:0)

谢谢gnanagurus!使用XSLT非常简单。此外,xslt:组件包含在Camel核心的最后一个版本中。 我定义了一个xlst文件'transform.xsl'taht包含了要省略的字段。然后定义了Camel路线:

from("file:/inn?noop=true")
            .to("xslt:file:src/transform.xsl")
            .marshal(xmlJsonFormat)
            .setHeader(Exchange.FILE_NAME, simple("${file:onlyname.noext}.json"))
            .to("file:/out").end();