2011-12-26 34 views
0

有人可以建議在getPipeline()方法中配置處理程序的最佳/正確方式。 當客戶端向服務器發送消息時,它由自定義對象組成,其中包含服務器所需的數據。 我已經配置了處理程序,如下圖所示:在getPipeline()方法中配置處理程序的正確方法

public ChannelPipeline getPipeline() throws Exception { 
ChannelPipeline pipeline = pipeline(); 

SSLEngine engine = SecureSslContextFactory.getServerContext().createSSLEngine(); 
engine.setUseClientMode(false); 

pipeline.addLast("ssl", new SslHandler(engine)); 

pipeline.addLast("decoder", new ObjectDecoder()); 
pipeline.addLast("encoder", new ObjectEncoder()); 

pipeline.addLast("pipelineExecutor", new ExecutionHandler(pipelineExecutor)); 

// and then business logic. 
pipeline.addLast("handler", new SecureServerHandler()); 

return pipeline; 
} 

當我編譯使用了Netty 3.2.7最終,我得到以下警告:

警告(78,33):ObjectDecoder()的組織。 jboss.netty.handler.codec.serialization.ObjectDecoder已棄用

當客戶端發送我得到以下運行時錯誤消息:

WARNING: Unexpected exception from downstream.
java.io.InvalidClassException: failed to read class descriptor
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1567)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1496)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1732)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
at org.jboss.netty.handler.codec.serialization.ObjectDecoder.decode(ObjectDecoder.java:129)
at org.jboss.netty.handler.codec.frame.FrameDecoder.callDecode(FrameDecoder.java:282)
at org.jboss.netty.handler.codec.frame.FrameDecoder.messageReceived(FrameDecoder.java:216)
at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:302)
at org.jboss.netty.handler.codec.frame.FrameDecoder.unfoldAndFireMessageReceived(FrameDecoder.java:321)
at org.jboss.netty.handler.codec.frame.FrameDecoder.callDecode(FrameDecoder.java:299)
at org.jboss.netty.handler.codec.frame.FrameDecoder.messageReceived(FrameDecoder.java:216)
at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:274)
at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:261)
at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:351)
at org.jboss.netty.channel.socket.nio.NioWorker.processSelectedKeys(NioWorker.java:282)
at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:202)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)

回答

0

您的問題可能與以下問題相同:How to implement ObjectDecoder(ClassResolver) in Netty 3.2.7

嘗試實例化ObjectDecoder爲new ObjectDecoder(ClassResolvers.weakCachingConcurrentResolver(null))以擺脫警告。

如果你的類沒有加載,請嘗試指定一個類加載器。請參閱http://markmail.org/message/4ftws33dxehbzbwd

希望這會有所幫助。

+0

我在代碼中看到它,但沒有在API(javadocs)中看到......這是什麼意思? –

相關問題