У меня есть веб-приложение, которое я запускаю в окнах и среде linux. В Linux и только Linux я получаю следующее исключение:Имя зависимости несовместимо в google protobuf 2.5.0
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)
...
Так что я отлажена его как локально, так и удаленно, сравнивая результат. Я не могу понять следующее:
Env:
Protobuf-Java-2.5.0
Java 7
В обоих случаях я запускаю тот же веб-приложение и Я нахожусь в том же месте в коде, который является com.google.protobuf.Descriptors.java#245
see code
Для контекста
...
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.");
}
}
...
А вот информация из отладчика:
Окна:
dependencies[i].getName() = {[email protected]}"descriptor.proto"
proto.getDependency(i) = {[email protected]}"descriptor.proto"
dependencies[i].getClass().getProtectionDomain().getCodeSource().getLocation().getPath() = {[email protected]}"/C:/Apps/Apache/jakarta/tomcat/webapps/ROOT/WEB-INF/lib/protobuf-java-2.5.0.jar"
Linux:
dependencies[i].getName() = {[email protected]}"google/protobuf/descriptor.proto"
proto.getDependency(i) = {[email protected]}"descriptor.proto"
dependencies[i].getClass().getProtectionDomain().getCodeSource().getLocation().getPath() = {[email protected]}"/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"
Так как dependecies загружаются из Protobuf jar, который является байтовым индексом (проверен), но результат dependencies[i].getName()
отличается от того, что в случае Linux вызывает DescriptorValidationException
. Это то, что находится рядом с моим пониманием.
Любая помощь будет очень признательна.
Вы правы, как всегда (по крайней мере, когда дело доходит до protobuf :). Большое спасибо за усилия по поддержанию ответов protobuf! –