public Object decode()

in dubbo-rpc-extensions/dubbo-rpc-rocketmq/src/main/java/org/apache/dubbo/rpc/rocketmq/codec/DecodeableRpcResult.java [77:118]


    public Object decode(Channel channel, InputStream input) throws IOException {
        if (log.isDebugEnabled()) {
            Thread thread = Thread.currentThread();
            log.debug("Decoding in thread -- [" + thread.getName() + "#" + thread.getId() + "]");
        }

        // switch TCCL
        if (invocation != null && invocation.getServiceModel() != null) {
            Thread.currentThread().setContextClassLoader(invocation.getServiceModel().getClassLoader());
        }
        ObjectInput in = CodecSupport.getSerialization(channel.getUrl())
            .deserialize(channel.getUrl(), input);

        byte flag = in.readByte();
        switch (flag) {
            case RocketMQCodec.RESPONSE_NULL_VALUE:
                break;
            case RocketMQCodec.RESPONSE_VALUE:
                handleValue(in);
                break;
            case RocketMQCodec.RESPONSE_WITH_EXCEPTION:
                handleException(in);
                break;
            case RocketMQCodec.RESPONSE_NULL_VALUE_WITH_ATTACHMENTS:
                handleAttachment(in);
                break;
            case RocketMQCodec.RESPONSE_VALUE_WITH_ATTACHMENTS:
                handleValue(in);
                handleAttachment(in);
                break;
            case RocketMQCodec.RESPONSE_WITH_EXCEPTION_WITH_ATTACHMENTS:
                handleException(in);
                handleAttachment(in);
                break;
            default:
                throw new IOException("Unknown result flag, expect '0' '1' '2' '3' '4' '5', but received: " + flag);
        }
        if (in instanceof Cleanable) {
            ((Cleanable) in).cleanup();
        }
        return this;
    }