2012-06-21 2 views
0

У меня есть простая программа (написанная на Java), которая использует буфер протокола google и отлично работает на машине Windows.Буфер протокола Google работает в Windows, но не в linux

Но когда я запускаю его на Linux машине я получаю следующее исключение:

com.google.protobuf.Descriptors$FileDescriptor.internalBuildGeneratedFileFrom(Ljava/lang/String;[Lcom/google/protobuf/Descriptors$FileDescriptor;Lcom/google/protobuf/Descriptors$FileDescriptor$InternalDescriptorAssigner; 
    at com.test.integration.protocols.protocolBuffers.messages.TestMsgs.<clinit>(TestMsgs.java:5111) 
    at com.test.integration.protocols.protocolBuffers.messages.TestMsgs$SessionInfo.<clinit>(TestMsgs.java:3346) 
    at com.test.integration.protocols.protocolBuffers.messages.TestMsgs$TestRequest.<init>(TestMsgs.java:782) 
    at com.test.integration.protocols.protocolBuffers.messages.TestMsgs$TestRequest.<clinit>(TestMsgs.java:760) 
    at com.test.simulators.TestJmsListener.onMessage(TestJmsListener.java:80) 
    at org.apache.activemq.ActiveMQMessageConsumer.dispatch(ActiveMQMessageConsumer.java:1215) 
    at org.apache.activemq.ActiveMQSessionExecutor.dispatch(ActiveMQSessionExecutor.java:131) 
    at org.apache.activemq.ActiveMQSessionExecutor.iterate(ActiveMQSessionExecutor.java:202) 
    at org.apache.activemq.thread.PooledTaskRunner.runTask(PooledTaskRunner.java:122) 
    at org.apache.activemq.thread.PooledTaskRunner$1.run(PooledTaskRunner.java:43) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907) 
    at java.lang.Thread.run(Thread.java:619) 

Я использую тот же файл банку для буфера протокола в обеих машинах.

+2

Это похоже только на часть сообщения об ошибке. Можете ли вы предоставить полную трассировку стека или, лучше, полную версию своей программы? –

+0

добавлен полный след. Это единственный результат, связанный с проблемой – giorashc

+0

Сообщение об ошибке говорит о дескрипторах файлов. Возможно, в приложении есть некоторые пути к файлам или код обработки пути, например, смешивает косую черту и обратную косую черту или использует абсолютные пути, которые действительны только для одной ОС, но не для других? –

ответ

2

Protoc и библиотека времени protobuf (jar) тесно связаны. Вы не можете использовать более старый protoc с более новой версией, и наоборот. Пожалуйста, дважды проверьте, что вы используете точно такую ​​же версию файла protobuf jar в Windows и Linux, и эта версия такая же, как версия protoc, которую вы использовали для генерации кода Java.

+0

Ну после многих попыток я вернул все к версии 2.1.0, и он работает. Я принимаю этот ответ, поскольку он правильный и самый близкий к моей проблеме. (хотя часть моего решения возвращалась к более старой версии) Спасибо! – giorashc

Смежные вопросы