2016-12-16 13 views
0

CamelとNetty4を使用して、TCPソケットを使用してサーバーにXMLメッセージをストリーミングするデバイス間のルートを設定します。このプロセスは、次のパスに従います。Camel-Netty4サポートされていないメッセージタイプInputStreamCacheエラー

IncomingXML - > POJOに変換 - >プロセス(応答を作成) - >変換(XMLへの応答) - > XML応答を返します。

<camelContext id="Lucy" xmlns="http://camel.apache.org/schema/blueprint"> 
    <dataFormats> 
     <jaxb id="pojos" contextPath="custom.pojo"/> 
    </dataFormats> 
    <route streamCache="true"> 
     <from uri="netty4:tcp://0.0.0.0:9000?serverInitializerFactory=#spf&amp;sync=true"/> 
     <unmarshal ref="pojos"/> 
     <process ref="pojosProcessor"/> 
     <marshal ref="pojos"/> 
    </route> 
</camelContext> 

我々はセットアップ以下ServerInitializerFactory initChannelとのパイプラインを:

ルートは青写真のXMLファイルに定義されています。

@Override 
protected void initChannel(Channel ch) throws Exception { 
    ch.pipeline().addLast(new LengthFieldBasedFrameDecoder(ByteOrder.BIG_ENDIAN, 66560, 0, 4, 0, 4, true)); 
    ch.pipeline().addLast(new XmlFrameDecoder(66560)); 
    ch.pipeline().addLast(new LengthFieldPrepender(4)); 
    ch.pipeline().addLast(new ByteArrayEncoder()); 
    ch.pipeline().addLast(new ServerChannelHandler(consumer)); 

} 

pojoProcessorは応答を作成し、それをOutオブジェクトの本体としてEchangeに追加しています。

私たちが応答を返すまで、すべてが機能しています。

:クライアントがメッセージに事前に追加さ長さを必要とするため、我々はログに次のエラーを取得するマーシャルを実行した後、我々は、使用する権利エンコーダは

ch.pipeline().addLast(new LengthFieldPrepender(4)); 
ch.pipeline().addLast(new ByteArrayEncoder()); 

だろうと思った。しかし、このチェーン付き

Caused by: java.lang.UnsupportedOperationException: unsupported message type: InputStreamCache (expected: ByteBuf, FileRegion) 

適切なエンコーダチェーンがどのようなものであるべきかについて、私たちは迷っています。カスタムコーデックを実装する必要があるのですか、または提供されたコーデックがあるソリューションがありますか?

誰でも持っているヘルプ、方向、または例があれば幸いです。

+0

、あなたは私がクラウスによって提案を追加streamCache –

答えて

0

ペイロードをbyte[]に変換します。これはcamel-nettyが理解できるものです。

<route streamCache="true"> 
    <from uri="netty4:tcp://0.0.0.0:9000?serverInitializerFactory=#spf&amp;sync=true"/> 
    <unmarshal ref="pojos"/> 
    <process ref="pojosProcessor"/> 
    <marshal ref="pojos"/> 
    <convertBodyTo type="byte[]"/> 
</route> 
+0

=「false」に設定し、それが今取り組んでいるが、私は今、次のメッセージ... – milltj

+0

63見ていますならば - org.apache.camel.camel-netty4を - 2.18.0 | Nettyから例外としてチャンネルをクローズしました。原因:[java.io.IOException - ピアによって接続がリセットされました] java.io.IOException:ピアによって接続がリセットされました – milltj

関連する問題