2015-06-11 28 views
1

首先,我對駱駝相當陌生,所以如果我想在這裏做什麼(或如何)是愚蠢的,請告訴我。Apache Camel - java DSL - 將字體轉換爲其中一個字段

CODE:

from("direct:one") 
     .to("mock:two") 
     .process(new Processor(){ 
       @Override 
       public void process(Exchange exchange)throws Exception{ 
         MyCustomObject obj = exchange.getIn().getBody(MyCustomObject.class); 
        exchange.getOut().setBody(obj.getOneOfTheFields()); 
       } 
     }) 
     .to("mock:three"); 

問題:

該處理器變換物體到的它的領域之一。我知道我可以用簡單的表達來代替它,但這需要我把'oneOfTheFields'放在一個字符串中,我不想這樣做。

有沒有更簡單的方法來使用java代碼來做到這一點?

+0

你的例子顯示了2行代碼轉換身體,是不是這麼短? – soilworker

+0

實際上有7行代碼和不必要的匿名類..一般都是樣板。我想這是很常見的情況,也許有這樣的:'.setBody(bodyAsInstanceOf(MyCustomObject.class).getOneOfTheFields())' – bulzak

+1

我不明白爲什麼「這將需要我把'oneOfTheFields'字符串」 - 你可以在每個對象中都有一個你想要的對象,不僅字符串 – dey

回答

1

你能不能簡單地這樣做:

from("direct:one") 
    .to("mock:two") 
    .setBody(body().getOneOfTheFields()) 
    .to("mock:three"); 

讓我知道這是否正常工作。

+0

不是,返回類型的body()是ValueBuilder,並且沒有.getOneOfTheFields()就可以了。 – bulzak

1

這可以通過使用setBody和駱駝simple可以輕鬆實現:

from("direct:one") 
    .to("mock:two") 
    .setBody(simple("${body.fieldName}")) 
    .to("mock:three"); 

您指定字段的名稱,駱駝將使用標準的訪問機制,設置適當的身體。

相關問題