2016-02-04 85 views
1

背景: 我想解開使用jaxb和駱駝的xml文件。我覺得我很難與它,因爲我不知道什麼期望文件。駱駝路線邏輯/輸出預期

例如,我有:

from("file://C:/test.xml").unmarshal(jaxb).to("file://C:/testEnd.java"); 

就這樣,我希望看到在java文件解組的結果(即參數和值從XML文件中的元素)。但是,當我運行該程序時,沒有在.java文件中顯示,但我沒有收到任何錯誤。

同樣的事情發生在編組。當我有一個.java文件作爲from函數和to函數中的.xml文件時,什麼也不會發生。

例如,我有:

from("file://C:/test.java").marshal(jaxb).to("file://C:/testEnd.xml"); 

從此,我希望從我的註釋的Java文件中看到的值出現在XML文件中。

問題: 我對這兩種情況的期望是正確的嗎?或者這種邏輯有什麼問題?如果在你的代碼要保存Java對象以XML的形式 ,然後再使用XML來檢索先前保存的java對象的狀態,我們就打包和解包 1):

+0

我會跳過jaxb,如果可能的話使用jacksonxml,如此處所述。更易於使用。 http://camel.apache.org/jackson-xml.html,您還需要定義一個.jaxb文件並定義您的jaxb類。 –

回答

1

請試試這個編組:將java對象轉換爲基於xml的文件並將其保存到文件 創建一個producerTemplate,將java對象發送到producerendpoint,按照jaxb dataformat進行編組,然後使用標記爲XmlRootElement的pojo bean將其轉換爲xml,並在jaxb標記中將其引用爲contextPath 。

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); 
} 

以上是其中U使用到Java對象發送到生產者端點,因爲ü使用template.requestBody,U正重新返回的對象客戶端代碼。

<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> 

這將是你的駱駝配置文件。希望這可以幫助

+0

感謝您的回覆。我如何定義jaxb和uri(direct:invoice)是什麼?我在pojo中做到這一點嗎? – JustBlossom

+1

直接:發票是由您在其上通過producertemplate發送消息的u創建的終端,如clientEight類代碼所示。 U不需要做任何其他配置,jaxb再次是一個已經在camel中定義的組件。請參閱駱駝食譜,這是一本很好的書 –

0

file組件獲取一個目錄,並處理該目錄中的所有文件。它不會默認處理文件,您必須使用選項或流組件。

看到http://camel.apache.org/file2.html

只有目錄

駱駝只支持用 起始目錄配置端點。所以directoryName必須是一個目錄。如果您要使用 僅使用單個文件,則可以使用fileName選項 (例如,通過設置fileName = thefilename。此外,起始目錄 不得包含具有$ {}佔位符的動態表達式。再次使用 fileName選項指定文件名的動態部分。