プロジェクトのいくつかのモジュールをカスタム クラス ローダーにロードするテストがあります (テスト目的で)。そのようなオブジェクトのメソッドの 1 つはカスタム オブジェクトを引数として取得し、それをテスト クラス (デフォルトのクラスローダーによってロードされた) から渡す場合、カスタム クラス ローダーによってロードされたオブジェクトのメソッドに渡します。 m 型不一致の例外を取得しています。
幸いなことに、私のカスタム オブジェクトは Serializable を実装しているため、この問題を回避できると考えていました (テスト クラスからオブジェクトをシリアライズし、カスタム クラスローダーでデシリアライズしてメソッドに渡すことを考えました)。ただし、シリアライゼーション utils クラスは親クラス ローダーによってロードされるため、生成されたオブジェクト (デシリアライゼーション出力) は依然としてデフォルトのクラス ローダーからポイントされます。
カスタム クラス ローダーでオブジェクトをデシリアライズするにはどうすればよいですか? コード:
Class<?> serialClassDefinition = classLoader.loadClass("org.apache.commons.lang.SerializationUtils");
final byte[] serializedDestData = SerializationUtils.serialize(sampleData);
final Method deSerializeMethod = serialClassDefinition.getDeclaredMethod("deserialize", byte[].class);
final Object oldSmapleData = deSerializeMethod.invoke(null, serializedSampleData);
return (invoke(stringA, stringB, stringC, oldSampleData, isAAA));