5

Camel は初めてで、Tomcat サーバーで単純なルートを実行しています。ルートは次のように構築されます。

Processor generateWebResponse = new MySpecialProcessor();
from("servlet:///url?matchOnUriPrefix=true").process(generateWebResponse);

次のような単純な単体テストを試しました。

Exchange lAuthRequest = createExchangeWithBody("[json body!]");
template.send("servlet:///url", lAuthRequest);
assertEquals("baseline body", lAuthRequest.getOut().getBody());

しかし、サーブレット エンドポイントを作成できないことを示す例外が発生します。例外メッセージは次のとおりです。

org.apache.camel.FailedToCreateProducerException: Failed to create Producer for endpoint: Endpoint[servlet:///url]. Reason: java.lang.UnsupportedOperationException: You cannot create producer with servlet endpoint, please consider to use http or http4 endpoint.

これは新しい開発なので、良いデザイン以外に多くの制約はありません。ルートの変更が必要な提案を受け入れます。また、慣用的ではない上記のことをしている場合は、提案された改善点で質問を修正して喜んでいます。

4

2 に答える 2

7

Tomcat にメッセージを送信するには、http クライアント コンポーネントを使用する必要があります。たとえば、camel--http コンポーネント: http://camel.apache.org/http

次に、Tomcat がサーブレットを実行するポート番号を知る必要があります。

template.send("http://localhost:8080/myapp/myserver", lAuthRequest);

クラスパスに camel-http を追加する必要があります。たとえば、maven を使用している場合は、依存関係として追加します。

于 2012-05-22T14:06:50.370 に答える
2

ルートを 2 つの部分に分割することで問題を解決しました。ルート宣言は次のようになります。

from("servlet:///auth?matchOnUriPrefix=true").inOut("direct:auth");
from("direct:auth").process(new AuthorizationProcessor());

テストは次のようになります。

Exchange lAuthRequest = createExchangeWithBody("test body");
template.send("direct:auth", lAuthRequest);
assertEquals("processed body", lAuthRequest.getOut().getBody());

これは完全なテストではありませんが、着信サーブレット部分を除くすべてのルートをカバーできます。とりあえず十分だと思います。

于 2012-05-22T19:12:28.707 に答える