0

プロジェクトのいくつかのモジュールをカスタム クラス ローダーにロードするテストがあります (テスト目的で)。そのようなオブジェクトのメソッドの 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));
4

0 に答える 0