2015-10-29 47 views
0

我使用<base64>元素解組來作爲XML的一部分的base64代碼。這條路線是這樣的:解組與駱駝:base64返回錯誤的二進制

<route> 
    <split streaming="true" strategyRef="myAggregationStaregy"> 
    <xpath>/*/*</xpath> 
    <choice> 
     <when> 
     <xpath>//record</xpath> 
     <to uri="file:/record.xml" /> 
     </when> 

     <when> 
     <xpath>//content</xpath> 

     <unmarshal> 
      <base64 /> 
     </unmarshal> 

     <to uri="file:/content.bin" /> 
     </when> 
    </choice> 
    </split> 
</route> 

雖然XML拆分工作正常的<unmarshal>任務返回垃圾。結果二進制文件很大程度上是預期的大小,但是這些字節本身是完全錯誤的。

嘗試:

  • 運用lineSeparatorlineLength選項沒有任何影響。
  • 當省略路由中的<unmarshal>塊並手動轉換生成的base64代碼(linux base64命令)時,我收到了正確的二進制文件。

任何想法?

回答

0

同時我找到了解決方案: 我期望<xpath>//content</xpath>語句過濾傳入的XML,以便郵件正文只包含content元素內的部分。

但這是錯誤的。這個「xpath」語句是「when」語句的謂詞,它根本沒有任何過濾。

爲了達到預期的行爲,我必須明確提取我的XML的「內容」部分並將其寫入消息主體(使用「setBody」語句)。我的路線終於如下所示:

<route> 
    <split> 
    <xpath>/*/*</xpath> 
    <choice> 
     <when> 
     <xpath>//record</xpath> 
     <to uri="file:/record.xml" /> 
     </when> 

     <when> 
     <xpath>//content</xpath> 

     <setBody><xpath>//content/text()</xpath></setBody> 

     <unmarshal> 
      <base64 /> 
     </unmarshal> 

     <to uri="file:/content.bin" /> 
     </when> 
    </choice> 
    </split> 
</route>