2016-02-21 101 views
0

我有一個非常簡單的駱駝流測試寫腳本。它看起來像這樣:駱駝腳本不運行

from("file://C:test?fileName=in.xml").routeId("ContentbasedRouter") 
.choice()  
    .when(toXML) 
     .script().javaScript("request.body.substring(3, 6)") 

但是當我運行此我得到

org.apache.camel.builder.script.ScriptEvaluationException: Failed to evaluate: js: request.body.substring(3, 6). Cause: <eval>:1 TypeError: GenericFile[C:\test\input.csv] has no such function "substring" 

我的意思是子是一個有效的JavaScript功能,所以爲什麼沒有認識到這一點?

回答

0

file消費者與GenericFile類型的主體發送交換,而不是String。如果你想要的文件名,你可以使用的方法GenericFile.getFileName()

from("file://C:test?fileName=in.xml").routeId("ContentbasedRouter") 
.choice()  
    .when(toXML) 
     .script().javaScript("request.body.fileName.substring(3, 6)") 

如果你想要的文件的內容,你可以將其轉換爲字符串:

from("file://C:test?fileName=in.xml").routeId("ContentbasedRouter") 
.convertBodyTo(String.class) 
.choice()  
    .when(toXML) 
     .script().javaScript("request.body.substring(3, 6)") 

GenericFile

+0

好,這是否意味着我需要在腳本之前將主體轉換爲字符串? –

+0

你可以,如果你想要的文件內容,或者你可以在我的答案 - 'request.body.fileName'中使用表達式。這取決於您是否希望爲下一個處理器保留'GenericFile' –

+0

使用轉換爲字符串。 –