Когда я проверяю эти два 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());
}
}
Я ожидаю, что выходные данные из канала будутТип тревоги. Любая ошибка, которую я делаю в тесте?