Copy java object/class from one classloader to another classloader

你离开我真会死。 提交于 2019-12-04 03:37:36

See Transloader on how to copy classes between ClassLoaders if you need to do one of the following:

  • Clone almost any object graph from one ClassLoader to another

  • Take any object from a foreign ClassLoader and invoke any method on it without cloning it

I believe he has the same Class (with the same name) but loaded and defined by two classloaders. The best thing to do is fix your system so the class is not loaded and twice.

If the class is as simple as you describe it in your case, you could look at XMLEncoder. There are significant restrictions using it, but in simple cases it should get the job done.

EDIT: Given this limitation, I would say put the data in a Map and use that. You could even have the two classes store their state in a Map internally so that movement is pretty fluid.

If that can't work, then it looks like you are facing a roll your own XML/JSON or just plain CSV, depending on the complexity of the data.

PowerMock classloading also provides something similar to TransLoader and it supports more advance use cases such as (some) reflection. You can easily execute a Runnable or Callable:

ClassloaderExecutor cle = new ClassloaderExecutor(classloader);
cle.execute(aRunnable); 
Object result = cle.execute(aCallable); // Result is cloned back to original CL

Have a look at the test case in the svn repo.

It's also available in Maven:

<dependency>
    <groupId>org.powermock</groupId>
    <artifactId>powermock-classloading</artifactId>
    <version>1.4.6</version>
</dependency>  
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!