Bonjour,
J'ai un gros problème d'utilisation de la réflexivité dans un contexte comprenant plusieurs classloaders.
Pour être précis:
- j'ai un module A dans un classloader A qui permet de lire du XML et de le traduire en objet Java,
- j'ai un module B dans un classloader B qui appelle le module A pour lire des fichiers XML.
Le problème vient du fait que le module A utilise la réflexivité pour savoir comment désérialiser le XML. Le mapping se fait via des annotations sur les champs de la classes Java.
(Ceux qui connaissent ont dû se douter que je parle de SimpleXML...)
Deux obstacles me bloquent pour l'instant:
- Les annotations que trouve le module A ne sont pas celles qu'il attend puisqu'elles ont été chargées par un classloader différent (qui n'est pas un parent). Résultat : il considère que la classe n'a pas d'annotations et n'arrive pas à affecter les champs,
- L'objet à déserialiser contient des Enum (sans plus de précision). La class Enum comprenant les valeurs à déserialiser se trouve dans le module B et n'existe pas dans le module A. Donc il n'arrive pas non plus à m'initialiser le champ (dans le cas où j'arrive à contourner salement le premier point).
Avez-vous une idée dont on gère la réflexivité quand on a plusieurs classloaders (genre, dans OSGi...)?
D'avance, merci
Partager