0

私はグーグルプロトコルバッファを使用する単純なプログラム(Javaで書かれた)を持っていて、それはウィンドウズマシンでうまく動作します。

しかし、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)

両方のマシンのプロトコルバッファに同じjarファイルを使用しています。

4

1 に答える 1

2

Protocとprotobufランタイムライブラリ(jar)は緊密に結合されています。新しいランタイムで古いプロトコルを使用することはできません。その逆も同様です。WindowsとLinuxでまったく同じバージョンのprotobufjarファイルを使用していることを再確認してください。このバージョンは、Javaコードの生成に使用したprotocのバージョンと同じです。

于 2012-06-21T16:50:10.693 に答える