0

これは、ApacheCamelバイナリにバンドルされている例です。

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

しかし、さらに先に進む方法がわからない...

4

2 に答える 2

3

XML(つまりSpring)なしでJavaに移植したい場合は、サーブレットコンポーネントを(簡単に)使用できません。

ルートを移植するだけで次のようになります。

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

Spring の例 (または任意の Spring Web アプリ) で機能するはずです。ルートを Spring Bean ( ) として定義した場合<route>、を に置き換えるだけです。<CamelContext><routeBuilder ref="demoRoute"><bean id="demoRoute" class="org.example.demo.DemoRoute">

ただし、これをプレーンなJavaで実行したいと思います(スプリングなし、xmlなし、webappなし)。Jetty コンポーネントを使用できます。違いは、Camel を開始するサーブレット コンテナーではなく、Camel がサーブレット コンテナーを開始することです。ただし、この単純な例では違いはありません。

スケルトンを作成するために、Maven アーキタイプから始めることをお勧めします。

たとえば、 [まあ、独自の Java アプリケーションがあり、スレッドを実行し続ける場合は、maven アーキタイプは必要ありません] をmvn archetype:generate選択します。org.apache.camel.archetypes:camel-archetype-java (Creates a new Camel project using Java DSL.)次に、アプローチをうまく行う必要があります。ただし、Maven アーキタイプはトレーニング目的には非常に適しています。

次に、依存関係を Jetty (camel-jetty.jar) に追加する必要があります (詳細はこちらを参照)。

実際のルートは、最初の行を除いてまったく同じです。from("jetty:http://localhost:8080/camel/hello")

素敵で簡単。

于 2012-12-31T09:17:04.017 に答える
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"));
于 2012-12-31T08:30:25.127 に答える