2014-06-12 127 views
1

如果我使用Camel unmarshal和XmlJsonDataFormat將JSON轉換爲帶有默認名稱空間的XML,則所有打開的xml元素在末尾都有一個空格。我沒有發現影響這種行爲的可能性。駱駝JSON到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

我得到的結果,而不在標籤空間如果命名空間是沒有|字符定義(這等同於沒有命名空間):

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

或者,如果該命名空間的正確的別名是這樣定義ns

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

當我嘗試第一個建議時,頂層元素根本沒有命名空間。 – user3092750

+0

@ user3092750是的,的確如此。如果您需要命名空間,請使用第二個解決方案。 –

+0

是否可以通過XML配置命名空間? (Blueprint DSL) –