2012-12-31 57 views
0

這是捆綁了Apache的駱駝二進制轉換XML信息的Java - Apache的駱駝

<route> 
     <!-- incoming requests from the servlet is routed --> 
     <from uri="servlet:///hello"/> 
     <choice> 
     <when> 
      <!-- is there a header with the key name? --> 
      <header>name</header> 
      <!-- yes so return back a message to the user --> 
      <transform> 
      <simple>Hello ${header.name} how are you?</simple> 
      </transform> 
     </when> 
     <otherwise> 
      <!-- if no name parameter then output a syntax to the user --> 
      <transform> 
      <constant>Add a name parameter to uri, eg ?name=foo</constant> 
      </transform> 
     </otherwise> 
     </choice> 
    </route> 

如何將此轉化爲Java

我在駱駝初學者的例子,有的怎麼來了這個

CamelContext context = new DefaultCamelContext(); 

context.addRoutes(new RouteBuilder(){ 

public void configure(){ 

from("servlet://hello").transform()..... 
} 
}); 

,但不知道如何進一步進行...

回答

3

如果你想將它移植到java沒有任何XML(春天就是)你不能(容易地)使用servlet組件。

剛端起的路線將是這樣的:

from("servlet:///hello") 
     .choice() 
     .when() 
      .header("name") 
       .transform(simple("Hello ${header.name} how are you?")) 
     .otherwise() 
      .transform(constant("Add a name parameter to uri, eg ?name=foo")); 

應該在春天的例子(或任何彈簧Web應用程序)工作,只是更換<route><CamelContext><routeBuilder ref="demoRoute">給你定義您的路線春豆(<bean id="demoRoute" class="org.example.demo.DemoRoute">)。

但是,我想你想在普通的java(沒有彈簧,沒有XML,沒有webapp)這樣做。您可以使用Jetty組件。不同的是,Camel然後將啓動servlet容器,而不是啓動Camel的servlet容器。這個簡單的例子沒有什麼不同。

我建議你開始使用Maven原型,以獲得骨架起來

例如mvn archetype:generate然後選擇org.apache.camel.archetypes:camel-archetype-java (Creates a new Camel project using Java DSL.) 那麼,如果你有自己的java應用程序並且線程繼續運行,那麼你不需要maven原型。那麼你應該用你的方法做得很好。然而,maven原型對於訓練目的來說非常好。

然後您需要添加一個依賴到Jetty(camel-jetty.jar)(更多here)。

實際的路線是,除了第一行如出一轍:from("jetty:http://localhost:8080/camel/hello")

尼斯和容易。

+0

漂亮直。謝謝! 這個例子支持「GET」。我怎麼做一個「POST」? – madhairsilence

+0

如果您使用GET或POST(即使在本例中),這並不重要。這也適用於該示例(使用瑞典語製作的HTTP工具cURL) 'curl -X POST -d name = superhero http:// localhost:8080/camel/hello' 即使是多數據格式的帖子也能很好地工作。查看文檔。 –

1

試試這個一個:

from("servlet://hello") 
.choice() 
.when(header("name").isNotNull()).transform(simple("Hello ${header.name} how are you?")) 
.otherwise().transform(constant("Add a name parameter to uri, eg ?name=foo"));