как разрешить исключение "не соответствует ожидаемому тегу" - PullRequest
0 голосов
/ 09 апреля 2019

Когда я проверяю эти два ChannelInboundHandler, чьи имена ProtobufVarint32FrameDecoder и ProtobufDecoder, возникает одно исключение, которое Protocol message end-group tag did not match expected tag.

import com.google.protobuf.InvalidProtocolBufferException;
import com.testnetdeve.custom.proto.AlarmProto;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.embedded.EmbeddedChannel;
import io.netty.handler.codec.protobuf.ProtobufDecoder;
import io.netty.handler.codec.protobuf.ProtobufVarint32FrameDecoder;
import org.junit.Test;

public class AlarmProtoTest {
    @Test
    public void testAlarmProto(){

        AlarmProto.Alarm.Builder builder = AlarmProto.Alarm.newBuilder();
        builder.setCommunity("Quene Home");
        builder.setBuildingId(31);
        builder.setBuildingPart("B");
        builder.setCellId(1);
        builder.setRoomId(204);
        builder.setAlarmCategory("Fire");
        builder.setAttachment("current time");

        EmbeddedChannel ch = new EmbeddedChannel();

        ch.pipeline().addLast("frameDecoder",new ProtobufVarint32FrameDecoder());
        ch.pipeline().addLast("decoder",new ProtobufDecoder(AlarmProto.Alarm.getDefaultInstance()));
        byte[] bytes = builder.build().toByteArray();
        System.out.println("the length of after being serialized:  " + bytes.length);

        ByteBuf buf = Unpooled.copiedBuffer(bytes);
        System.out.println(buf.readableBytes());
        assert ch.writeInbound(buf);
        assert ch.finish();
        AlarmProto.Alarm alarm = ch.readInbound();
        System.out.println(alarm.toString());

    }
}

Я ожидаю, что выходные данные из канала будутТип тревоги. Любая ошибка, которую я делаю в тесте?

...