0

apache camel で単体テストの入力としてファイルを使用するエレガントな方法を見たことがあると思いますが、Google のスキルではうまくいきません。

私が欲しいのは代わりに:

String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
    <snip>...long real life xml that quickly fills up test files.</snip>";
template.sendBody("direct:create", xml);

私が見たと思うのは次のようなものです

template.sendBody("direct:create", someCamelMetod("/src/data/someXmlFile.xml"));

これが文書化されている場所/場合は誰でも知っていますか?

編集:

誰かがより良い方法を知っていれば、まだ興味があります。

4

2 に答える 2

3

あなたの質問を正しく理解している場合は、テストするルートへの入力として xml ファイルを送信してください。私の解決策は、Camel テスト サポートの一部である advisorWith 戦略を使用することです。ここでそれについて読んでください:http://camel.apache.org/testing.html

したがって、テスト対象のルートが次のようなものであるとします。

from("jms:myQueue")
   .routeId("route-1")
   .beanRef(myTransformationBean)
   .to("file:outputDirectory");

テストでは、ファイル ポーリング コンシューマーからこれを置き換えることで、このルートに xml を送信できます。

context.getRouteDefinitions().get(0).adviceWith(context, new AdviceWithRouteBuilder() {
   @Override
   public void configure() throws Exception {
       replaceRouteFromWith("route-1", "file:myInputDirectory");
   }
});
context.start();

次に、入力 xml ファイルを myInputDirectory に配置すると、それがピックアップされ、ルートへの入力として使用されます。

于 2012-11-05T07:34:06.353 に答える
0

実際には、あなたは自分でいくつかのマイナーな仕事をしなければなりません。エンコーディングを知りたいと思うかもしれないので、テキストファイルを読むことはそれほど簡単ではありません。最初のケース(インライン文字列)では、常にUTF-16を使用しています。ファイルは何でもかまいませんが、それがどのエンコーディングであるかを教えてくれないので、あなたはそれを知っている必要があります。UTF-8を使用している場合、次のようなことができます。

public String streamToString(InputStream str){
   Scanner scanner = new Scanner(is, "UTF-8").useDelimiter("\\A"); 
   if (scanner.hasNext()) 
      return scanner.next(); 
   return "";
}

// from classpath using ObjectHelper from Camel.
template.sendBody("direct:create", streamToString(ObjectHelper.loadResourceAsStream("/src/data/someXmlFile.xml")));
于 2012-11-03T20:39:50.177 に答える