Hallo, gibt es eine Möglichkeit, einen klassengeladenen Kontext (atrributes usw.) von einem Klassenlader (zum Beispiel einem 'gemachten' Klassenpunkt) in einen anderen Klassenlader zu kopieren?
Klar machen, Beispiel: Ich habe ein Objekt Punkt auf CL 1. Jetzt auf einem anderen CL2 ausgeführt, möchte ich dieses Objekt in CL 3 erstellen.
Einige obj:
%Vor%Landschaft:
%Vor%Aber ich kann sun.reflection (nicht verfügbar) nicht verwenden und die Serialisierung funktioniert nicht, da CL2 das Objekt automatisch mit CL 1 "rekonstruiert".
Eine Lösung, die ich gelernt habe, war eine "100%" Java-Reflektion, die im Grunde die Felder von Objekt aus CL2 holt und auf dem neuen Objekt aufbaut.
PS: Es muss auf Java 1.4.2 laufen: '(
Siehe Transloader zum Kopieren von Klassen zwischen ClassLoaders, wenn Sie einen der folgenden Schritte ausführen müssen:
>Clone fast jedes Objektdiagramm von einem ClassLoader zum anderen
Nimm irgendein Objekt von einem fremden ClassLoader und rufe eine beliebige Methode darauf auf, ohne es zu klonen
Wenn die Klasse so einfach ist, wie Sie es in Ihrem Fall beschreiben, können Sie sich XMLEncoder . Es gibt erhebliche Einschränkungen bei der Verwendung, aber in einfachen Fällen sollte es die Arbeit erledigen.
BEARBEITEN: Angesichts dieser Einschränkung würde ich sagen, die Daten in eine Map einfügen und diese verwenden. Sie könnten sogar die beiden Klassen ihren Status intern in einer Map speichern lassen, so dass die Bewegung ziemlich flüssig ist.
Wenn das nicht funktioniert, sieht es so aus, als ob Sie eine eigene XML / JSON-Rolle oder einfach nur CSV rollen, abhängig von der Komplexität der Daten.
Das PowerMock-Classloading bietet auch etwas Ähnliches wie TransLoader und es unterstützt mehr fortgeschrittene Anwendungsfälle wie (einige) Reflektionen. Sie können leicht ausführen oder ausführen:
%Vor%Sehen Sie sich die an Testfall im SVN Repo.
Es ist auch in Maven verfügbar:
%Vor%Tags und Links java classloader copy javabeans