web-dev-qa-db-ja.com

ブローカーがシリアル化可能なクラスを使用できない:ActiveMQでメッセージを表示しているときにJava.lang.ClassNotFoundExceptionが発生する

ActiveMQキューにキューイングされているメッセージの内容を確認したい。 web-console。( http:// localhost:8161/admin/queues.jsp )を開き、キューのメッセージのmessage-idをクリックしました。メッセージの内容ではなく、「メッセージの詳細」ウィンドウに次のエラーが表示されます。

"javax.jms.JMSException:コンテンツから本体をビルドできませんでした。ブローカーはシリアライズ可能なクラスを使用できません。理由:Java.lang.ClassNotFoundException:"

この例外の原因は何ですか?これを取り除くために何をする必要がありますか?

10
OwlR

ActiveMQバージョン5.8.0を使用してこれと同じエラーが発生しました

私の場合は red herring でしたが、ActiveMQコンソールはメッセージを逆シリアル化できませんでした。クラスが含まれているjarにアクセスしてはいけませんが、コンシューマーアプリケーションはアクセスでき、メッセージは渡されます。キューからコンシューマーに問題なくオンになります。

ここで問題の解決策があるかどうか(コンソールでメッセージを表示する)、およびActiveMQの最新バージョンでこれがどのように処理されるかを確認したいと思います。

3
chim

OwIRが述べたように、クラスを含むjarファイルのパスをwrapper.Java.classpath.3%ACTIVEMQ_HOME%\bin\win64\wrapper.confプロパティに設定する必要があります。

上記のプロパティを更新した後、以下の例外が発生する可能性があります

Serializable class not available to broker. Reason: Java.lang.ClassNotFoundException: Forbidden class

これを修正するには、wrapper.Java.additional.13プロパティを-Dorg.Apache.activemq.SERIALIZABLE_PACKAGES="<choose_the_packages_set_it_here>"に設定します。

値として-Dorg.Apache.activemq.SERIALIZABLE_PACKAGES="*"を使用することもできますが、ワイルドカードを使用するのは安全でない場合があります。

これは私のために働いた!それがあなたを助けることを願っています

2
Kamal