Camel JSON到XML转换问题

时间:2014-06-12 14:38:02

标签: xml json apache-camel

如果我使用Camel unmarshal和XmlJsonDataFormat将JSON转换为具有默认命名空间的XML,则所有打开的xml元素在末尾都有一个空格。我没有发现影响这种行为的可能性。

这是转换后的XML:

<Message xmlns="http://example.com/Message/1">
    <Header >
        <Header1 >header 1</Header1>
        <Header2 >header 2</Header2>
    </Header>
</Message>

这是我的路线定义:

public void configure() throws Exception {
    // create JSON to XML data format
    XmlJsonDataFormat json2XmlFormat = new XmlJsonDataFormat();
    json2XmlFormat.setEncoding("UTF-8");
    json2XmlFormat.setRootName("Message");

    List<XmlJsonDataFormat.NamespacesPerElementMapping> namespaces = new        ArrayList<XmlJsonDataFormat.NamespacesPerElementMapping>();
    namespaces.add(new XmlJsonDataFormat.NamespacesPerElementMapping("Message", "||http://example.com/Message/1|"));
    json2XmlFormat.setNamespaceMappings(namespaces);

    from("direct:input")
        .unmarshal(json2XmlFormat)
        .log("${body}");
}

转换的XML对空格仍然有效。但是我希望有一个解决方案。

setSkipWhitespace()setTrimSpaces()仅适用于XML到JSON

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

如果在没有|字符的情况下定义名称空间(这相当于没有名称空间),我得到了标签中没有空格的结果:

namespaces.add(new XmlJsonDataFormat.NamespacesPerElementMapping("Message", "http://example.com/Message/1"));

或者,如果定义了名称空间的正确别名,例如ns

namespaces.add(new XmlJsonDataFormat.NamespacesPerElementMapping("Message", "|ns|http://example.com/Message/1|"));