2010-05-13 63 views
1

我正在尝试将应用程序从jdk 1.5迁移到jdk 1.6,而不会引入对最终用户可见的任何更改。 应用程序的输出是使用jaxp生成的xml,它是jdk库的一部分。由于jaxp版本在jdk 1.5和1.6中不同,因此生成的xml在每个版本中看起来都不相同。如何在jdk 1.6中使用jaxp 3?

举例:DatatypeFatory.newInstance().newDuration(60)在jdk1.5中生成'PT2H17M0.000S',在jdk1.6生成'P0Y0M0DT2H17M0.000S'。两者都是正确的,但我想避免任何可见的变化。

像DatatypeFactory这样的类有一个机制,它允许指定应该使用哪个实现,但它依赖于指定全限定类名。因此,理论上我可以下载与jdk 1.5中使用的版本相同的jaxp jar,并让应用程序使用它们。不幸的是,两个版本中的包和类名是相同的,所以我不得不通过java来从jar中加载类,而不是jdk。我试图在classpath的开头放置jaxp jar,但它没有帮助。

是否有可能告诉java从外部jar而不是jdk库加载类?我能用其他方式解决这个问题吗?

在此先感谢

回答

0

不幸的是,包和类名是在这两个版本是相同的,所以我会以某种方式告诉Java从罐中,而不是JDK装入类。

它由classLoader决定。 1.你不能除了jdk库。 2.你的第三个jar有相同的名称和类名。

你可以做的其他事情,用第三个jar的packageName重写,然后重新编译。

+0

您也可以使用自己的ClassLoader。 DocumentBuilderFactory newInstance(String factoryClassName,ClassLoader classLoader) – 2012-12-10 08:34:55