Jan*_*yka 6 java protocol-buffers
我有一个Web应用程序,我在Windows和Linux环境中运行.在Linux和只有 Linux我得到以下异常:
Caused by:
java.lang.IllegalArgumentException: Invalid embedded descriptor for "moop_shared.proto".
at com.google.protobuf.Descriptors$FileDescriptor.internalBuildGeneratedFileFrom(Descriptors.java:301)
...
Caused by:
com.google.protobuf.Descriptors$DescriptorValidationException: moop_shared.proto: Dependencies passed to FileDescriptor.buildFrom() don't match those listed in the FileDescriptorProto.
at com.google.protobuf.Descriptors$FileDescriptor.buildFrom(Descriptors.java:246)
at com.google.protobuf.Descriptors$FileDescriptor.internalBuildGeneratedFileFrom(Descriptors.java:299)
...
Run Code Online (Sandbox Code Playgroud)
所以我在本地和远程调试它比较结果.我无法理解以下内容:
ENV:
protobuf的-Java的2.5.0
java 7
在这两种情况下,我运行相同的webapp,我在代码中的相同位置,这是com.google.protobuf.Descriptors.java#245 看代码
对于上下文
...
for (int i = 0; i < proto.getDependencyCount(); i++) {
HERE --> if (!dependencies[i].getName().equals(proto.getDependency(i))) {
throw new DescriptorValidationException(result,
"Dependencies passed to FileDescriptor.buildFrom() don't match " +
"those listed in the FileDescriptorProto.");
}
}
...
Run Code Online (Sandbox Code Playgroud)
以下是来自调试器的信息:
视窗:
dependencies[i].getName() = {java.lang.String@3681}"descriptor.proto"
proto.getDependency(i) = {java.lang.String@3682}"descriptor.proto"
dependencies[i].getClass().getProtectionDomain().getCodeSource().getLocation().getPath() = {java.lang.String@3846}"/C:/Apps/Apache/jakarta/tomcat/webapps/ROOT/WEB-INF/lib/protobuf-java-2.5.0.jar"
Run Code Online (Sandbox Code Playgroud)
Linux的:
dependencies[i].getName() = {java.lang.String@2444}"google/protobuf/descriptor.proto"
proto.getDependency(i) = {java.lang.String@2445}"descriptor.proto"
dependencies[i].getClass().getProtectionDomain().getCodeSource().getLocation().getPath() = {java.lang.String@2608}"/tmp/jetty-0.0.0.0-8080-cnc-webapp-1.6.3-SNAPSHOT.war-_-any-/webapp/WEB-INF/lib/protobuf-java-2.5.0.jar"
Run Code Online (Sandbox Code Playgroud)
因此,两个dependecies都是从protobuf jar加载的,它是字节不一致的(检查),但结果dependencies[i].getName()是不同的,在Linux的情况下会导致DescriptorValidationException.这是我理解的东西.
任何帮助都感激不尽.