java 异常com/google/protobuf/UnknownFieldSet

本文介绍了一个关于HBase和Protobuf版本不兼容的问题,具体表现为无法重写final方法的错误。问题根源在于不同版本的Protobuf对于getUnknownFields方法处理方式的变化。解决方案为升级到Protobuf 2.5.0及以上版本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Caused by: java.lang.VerifyError: class org.apache.hadoop.hbase.protobuf.generated.ClientProtos$Result overrides final method getUnknownFields.()Lcom/google/protobuf/UnknownFieldSet;
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
        at org.apache.hadoop.hbase.protobuf.ProtobufUtil.<clinit>(ProtobufUtil.java:211)
        at org.apache.hadoop.hbase.ClusterId.parseFrom(ClusterId.java:64)
        at org.apache.hadoop.hbase.zookeeper.ZKClusterId.readClusterIdZNode(ZKClusterId.java:75)
        at org.apache.hadoop.hbase.client.ZooKeeperRegistry.getClusterId(ZooKeeperRegistry.java:86)
        at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.retrieveClusterId(ConnectionManager.java:850)
        at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.<init>(ConnectionManager.java:635)
        ... 57 more

protobuf-java-2.4.0a.jar的GeneratedMessage类代码

  //@Override (Java 1.6 override semantics, but we must support 1.5)
  public final UnknownFieldSet getUnknownFields() {
    return unknownFields;
  }

protobuf-java-2.5.0.jar版本的GeneratedMessage类代码

  //@Override (Java 1.6 override semantics, but we must support 1.5)
  public UnknownFieldSet getUnknownFields() {
    throw new UnsupportedOperationException(
        "This is supposed to be overridden by subclasses.");
  }

将原来的final方法改成了需要子类重写的方法。

所以会报上面出现的不能重写final方法的错。

解决办法:换protobuf-java-2.5.0.jar版本及以上版本的jar包

While parsing a protocol message, the input ended unexpectedly in the middle of a field. This could mean either that the input has been truncated or that an embedded message misreported its own length. 2025-06-12 21:47:02,722 [12] ERROR PitayaClient.Zmq.ZeroMqClient - at Google.Protobuf.CodedInputStream.RefillBuffer(Boolean mustSucceed) in T:\src\github\protobuf\csharp\src\Google.Protobuf\CodedInputStream.cs:line 1426 at Google.Protobuf.CodedInputStream.ReadRawByte() in T:\src\github\protobuf\csharp\src\Google.Protobuf\CodedInputStream.cs:line 1476 at Google.Protobuf.CodedInputStream.ReadRawVarint64() in T:\src\github\protobuf\csharp\src\Google.Protobuf\CodedInputStream.cs:line 1205 at Google.Protobuf.UnknownFieldSet.MergeFieldFrom(CodedInputStream input) in T:\src\github\protobuf\csharp\src\Google.Protobuf\UnknownFieldSet.cs:line 190 at Google.Protobuf.UnknownFieldSet.MergeFieldFrom(UnknownFieldSet unknownFields, CodedInputStream input) in T:\src\github\protobuf\csharp\src\Google.Protobuf\UnknownFieldSet.cs:line 269 at FCoreProto4GDR.PosiItem.MergeFrom(CodedInputStream input) in E:\GUI\ArdaClient\protobufLib\ProtoGenerated\Fcore4GDR.cs:line 4431 at Google.Protobuf.CodedInputStream.ReadMessage(IMessage builder) in T:\src\github\protobuf\csharp\src\Google.Protobuf\CodedInputStream.cs:line 621 at FCoreProto4GDR.PubDetails.MergeFrom(CodedInputStream input) in E:\GUI\ArdaClient\protobufLib\ProtoGenerated\Fcore4GDR.cs:line 9135 at Google.Protobuf.MessageExtensions.MergeFrom(IMessage message, Byte[] data, Boolean discardUnknownFields, ExtensionRegistry registry) in T:\src\github\protobuf\csharp\src\Google.Protobuf\MessageExtensions.cs:line 214 at Google.Protobuf.MessageParser`1.ParseFrom(Byte[] data) in T:\src\github\protobuf\csharp\src\Google.Protobuf\MessageParser.cs:line 247 at PitayaClient.Zmq.ZeroMqClient.SubscribeOrdRelated() in D:\project\GUI\ardaclient\PitayaClient\Zmq\ZeroMqClient.cs:line 37
最新发布
06-14
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值