ここで起こっていることは、サーブレットスレッドに、呼び出しているMBeanのコンテキストクラスローダーとは異なるコンテキストクラスローダーがあることだと思います。したがって、MBean属性、操作パラメーター、または戻り値にコアJVMクラスではないタイプ(または同じルートクラスローダーから共有されていないクラス)が含まれている場合、ClassCast、ClassNotFound、およびClassDefNotFound例外が発生します。
この手順はあなたのために働くかもしれません。必要なのは、サーブレットスレッドのコンテキストクラスローダーを、MBeanがロードされたのと同じクラスローダーに一時的に変更することです。呼び出しが完了したら、再度設定します。ターゲットMBeanのObjectNameがわかっているので、MBeanServerは正しいクラスローダーを提供します。
基本的な例は次のとおりです。
public void callMBean() throws MalformedObjectNameException, NullPointerException, InstanceNotFoundException {
final ClassLoader currentClassLoader = Thread.currentThread().getContextClassLoader();
try {
ObjectName targetObjectName = new ObjectName(".....");
MBeanServer server = ManagementFactory.getPlatformMBeanServer();
ClassLoader tmpClassLoader = server.getClassLoaderFor(targetObjectName);
Thread.currentThread().setContextClassLoader(tmpClassLoader);
// ==========================================
// Invoke operations here
// ==========================================
} finally {
Thread.currentThread().setContextClassLoader(currentClassLoader);
}
}