欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

invalid embedded descriptor for "proto"dependencies passed (protobufer)解决方法

更新时间: 2014-01-05 03:08:29 责任编辑: Author_N1

 

Invalid embedded descriptor for ".proto".Dependencies passed (Protobufer)解决办法

前言

  之前开发的时候,发现居然出现了Dependencies passed to FileDescriptor.buildFrom() don't match those listed in the FileDescriptorProto.的错误,还有Protocol Buffers Invalid embedded descriptor problem等错误,上网google了很久也没找到解决方法,最终经过设断点找官方文档,才把问题解决了。然后分享下解决问题的方法和过程。


一、找到出现bug的原因

  看到报错了之后,就去设断点,用debug模式,弄明白为什么会出问题,通过设断点知道if (!dependencies[i].getName().equals(proto.getDependency(i))) {这里出现问题了,原因是两个地方的依赖不一样,这个涉及到proto文件的命名空间Package,import引入的文件,生成的java包路径等问题。因为两个值不相等,所以找到问题的原因所在,然后去看了自己的proto文件。一个是这样的:

import "descriptor.proto";
package com.pwrd.zs;

extend google.protobuf.MessageOptions {
  optional int32 msgid = 54321;
}

另一个是谷歌的descriptor.proto文件,由于这个文件的import和package没有正确使用,所以有问题,会报错!

package google.protobuf;
option java_package = "com.google.protobuf";
option java_outer_classname = "DescriptorProtos";


二、解决问题

  1、java包路径和proto文件的命名空间。只要统一两边的依赖和命名空间以及正确设置好java包路径即可,在proto文件中,如果存在package声明无java_package声明,则说明该proto文件所在命名空间和生成的java包路径是一样的,如果有java_package则这个声明的为生成的java包路径,pacakge则只表示proto文件的命名空间,不表示java包路径!

  2、两个文件的依赖关系(import)。即import引用的文件代表依赖关系,且import引用的要在对应的命名空间里引用,比如两个文件都在同个目录下,可以直接引用import "descriptor.proto",但是由于第一个文件的package命名空间是在google.protobuf里面,所以实际上是引用不到的,这样就会出问题,只要将descriptor.proto文件放在其google文件夹下的protobuf的文件夹下即可,然后import  “google/protobuf/descriptor.proto”,这样就解决了第二个问题!

  最后结果如下:

import "google/protobuf/descriptor.proto";

option java_package = "com.pwrd.zs.common.msg";
option java_outer_classname = "Options";

extend google.protobuf.MessageOptions {
  optional int32 msgid = 54321;
}



三、总结

  由于历史遗留下的问题,将两个proto放在同个目录下,然后package不一致出现了错误,没有正确理解package命名空间和import的概念及对应的生成的java包路径,造成了一些问题,实际上理解了之后还是很简单的。以后要吸取教训。

  全文完。。。。

    

  

  

    



上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 03:08:29
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/18748/
本文WWW.DOC100.NET DOC100.NET版权所有。