2016-12-16 50 views
0

我們正在探索使用Camel和Netty4在使用TCP套接字將XML消息流式傳輸到我們的服務器的設備之間設置路由。該過程遵循以下路徑:Camel-Netty4不支持的消息類型InputStreamCache錯誤

IncomingXML - >轉換爲POJO - >進程(創建響應) - >轉換(對XML的響應) - >返回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管道。

@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

我克勞斯添加的建議,它現在的工作,但我現在看到下面的消息... – milltj

+0

63 - org.apache.camel.camel-netty4 - 2.18.0 |關閉頻道作爲例外從Netty引發。導致:[java.io.IOException - 通過對等方重置連接] java.io.IOException:由對等方重置的連接 – milltj

相關問題