MessagePackコーディング機能テストコード補完

2737 ワード

李林峰の「netty権威ガイド第2版」の123ページでは、著者は以前のEchoServerとEchoClientを改造し、同時にカスタムMsgpackEncoderとMsgpackDecoderコーデッククラスを作成した.pojoオブジェクトを転送するコーデック機能をテストし、clien側を改造した後、123ページの下でサービス側コードがクライアントと似ていると述べ、参考書に添付されているソースコードを参照してください.しかし、ソースコードにはこのセクションはありません.初心者が本の例をテストしたい場合は、一時的には書けません.ここを参考にすると、実は簡単です.EchoServerはほとんど動かず、EchoServer Handlerのコードだけを変更します.
public class EchoServerHandler extends ChannelHandlerAdapter {


    @Override
    public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {

        System.out.println("server receive the msgpack message : "+msg+"");
        //  
        ctx.writeAndFlush(msg);
    }



    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
        cause.printStackTrace();
        //  
        ctx.close();
    }
}

またテスト中にpojoオブジェクトクラス(本ではUserInfo)に@Message注釈を付けないとメッセージが届かず、作者が忘れたのか、注釈が属するクラス
import org.msgpack.annotation.Message;

また、EchoClientHandlerでサービス側にpojoオブジェクトを送信、MesagePackコーデック後、EchoServerHandlerのchannelReadメソッドで印刷されたmsgがpojoオブジェクトのtoStringメソッドの内容は、直接msgをUserInfoに変換することはできません.そうしないとjavaに報告されます.lang.ClassCastException: org.msgpack.type.ArrayValueImpl cannot be cast to UserInfo
リストに移動すると、リストをループし、リストを印刷します.get(0)出力null,印刷list.get(0).getName()レポートorg.msgpack.type.NilValue cannot be cast to UserInfo;リストを直接出力するとmsgを出力する効果と同じです.
参照先:http://blog.csdn.net/u012247397/article/details/52396257