2010-05-13 4 views
1

J'essaie de migrer l'application de jdk 1.5 vers jdk 1.6 sans introduire de changements visibles pour l'utilisateur final. La sortie de l'application est un xml généré à l'aide de jaxp qui fait partie des bibliothèques jdk. Puisque les versions jaxp sont différentes dans jdk 1.5 et 1.6, le xml résultant est différent dans chaque version.Comment utiliser jaxp 3 avec jdk 1.6?

Un exemple: DatatypeFatory.newInstance().newDuration(60) produit 'PT2H17M0.000S' dans jdk 1.5 et 'P0Y0M0DT2H17M0.000S' dans jdk 1.6. Les deux sont corrects, mais je veux éviter les changements visibles.

Des classes telles que DatatypeFactory disposent d'un mécanisme qui permet de spécifier quelle implémentation doit être utilisée, mais il dépend de la spécification du nom de classe qualifié complet. Donc, en théorie, je pourrais télécharger jaxp jars avec la même version qui est utilisée dans jdk 1.5 et laisser l'application les utiliser. Malheureusement, les noms des paquetages et des classes sont les mêmes dans les deux versions, donc je devrais dire à java de charger les classes de jar et non de jdk. J'essayais de mettre jaxp jars au début du classpath, mais cela n'a pas aidé.

Est-il possible de dire à java de charger des classes à partir de bibliothèques jar externes et non jdk? Puis-je résoudre ce problème d'une autre manière?

Merci à l'avance

Répondre

0

Malheureusement, les noms de paquets et de classe sont les mêmes dans les deux versions, donc je dois dire en quelque sorte java pour charger les classes de pot et non jdk.

tout est décidé par classLoader. 1. vous ne pouvez pas exclure la librairie jdk. 2. votre troisième pot a le même nom et le même nom de classe.

autre chose que vous pouvez faire, réécrire avec le nom du paquet du troisième jar, et recompiler.

+0

même si vous pouvez utiliser votre propre ClassLoader. DocumentBuilderFactory newInstance (String factoryClassName, ClassLoader classLoader) –

Questions connexes