2

ファイルの処理に akka-camel を使用しています。私の最初のテストはうまく機能していましたが、実際の xml ファイルを渡し始めたときに、型変換が発生しました。

これが私の消費者です(非常に単純ですが、msg.bodyAs [String]で突っ込んでいます)

class FileConsumer extends Consumer {
  def endpointUri = "file:/data/input/actor"

  val processor = context.actorOf(Props[Processor], "processor")

  def receive = {
    case msg: CamelMessage => {
      println("Parent...received %s" format msg)
      processor ! msg.bodyAs[String]
    }
  }
}

エラー:

[ERROR] [04/27/2015 12:10:48.617] [ArdisSystem-akka.actor.default-dispatcher-5] [akka://ArdisSystem/user/$a] Error during type conversion from type: org.apache.camel.converter.stream.FileInputStreamCache to the required type: java.lang.String with value org.apache.camel.converter.stream.FileInputStreamCache@4611b35a due java.io.FileNotFoundException: /var/folders/dh/zfqvn9gn7cl6h63d3400y4zxp3xtzf/T/camel-tmp-807558/cos2920459202139947606.tmp (No such file or directory)
org.apache.camel.TypeConversionException: Error during type conversion from type: org.apache.camel.converter.stream.FileInputStreamCache to the required type: java.lang.String with value org.apache.camel.converter.stream.FileInputStreamCache@4611b35a due java.io.FileNotFoundException: /var/folders/dh/zfqvn9gn7cl6h63d3400y4zxp3xtzf/T/camel-tmp-807558/cos2920459202139947606.tmp (No such file or directory)

xml の実際の内容と関係があるかどうか疑問に思っています。それらはまったく大きくありません(約70kb)。XML 自体の実際の例を提供できるとは思えません。なぜ非常に小さく、文字列に変換されることに問題があるのか​​ について困惑しています。他のダミーのサンプル xml ファイルは問題なく動作しました。

編集: 私が持っていた提案の 1 つは、私が行った StreamCache を有効にすることでした。ただし、まだ機能していないようです。Ankush がコメントしたように、エラーは紛らわしいです。それが実際にストリームの問題なのか、それとも本当に変換の問題なのかはわかりません。

http://camel.apache.org/stream-caching.html

以下を追加しました

  camel.context.setStreamCaching(true)
4

2 に答える 2

6

私はついに問題を理解することができました。問題はデータの不良ではなく、ファイルのサイズでした。これを考慮するには、camel コンテキストに追加の設定を追加する必要があります。

http://camel.apache.org/stream-caching.html

私が使用した設定は以下のとおりです。ストリームキャッシュをオフにする必要があるかどうかは、さらに調査する必要がありますが、これが始まりです。

camel.context.getProperties.put(CachedOutputStream.THRESHOLD, "750000");

またはストリームキャッシュをオフにする

 camel.context.setStreamCaching(false)

これが他の誰かに役立つことを願っています。

于 2015-04-30T04:06:06.443 に答える