2010-05-13 2 views
1

Я пытаюсь перенести приложение из jdk 1.5 в jdk 1.6 без внесения каких-либо изменений, видимых конечному пользователю. Вывод приложения - это xml, сгенерированный с использованием jaxp, который является частью библиотек jdk. Поскольку версии jaxp различаются в jdk 1.5 и 1.6, полученный xml выглядит по-разному в каждой версии.Как использовать jaxp 3 с jdk 1.6?

Пример: DatatypeFatory.newInstance().newDuration(60) производит «PT2H17M0.000S» в jdk 1.5 и «P0Y0M0DT2H17M0.000S» в jdk 1.6. Оба правильные, но я хочу избежать любых видимых изменений.

Такие классы, как DatatypeFactory, имеют механизм, позволяющий указать, какую реализацию следует использовать, но он зависит от указания полного имени класса. Поэтому теоретически я могу загрузить jaxp-банки с той же версией, которая используется в jdk 1.5, и позволить приложению использовать их. К сожалению, имена пакетов и классов в обеих версиях одинаковы, поэтому мне нужно как-то сказать java для загрузки классов из jar, а не jdk. Я пытался поставить jaxp jars в начале пути к классам, но это не помогло.

Можно ли указать java для загрузки классов из внешних jar, а не библиотек jdk? Могу ли я решить эту проблему любым другим способом?

Заранее спасибо

ответ

0

К сожалению, имена пакетов и классов одинаковы в обеих версиях, так что я должен был бы как-то сказать Java для загрузки классов из баночки, а не JDK.

все решает классLoader. 1. Вы не можете исключить jdk lib. 2. Ваша третья банка имеет то же имя и имя класса.

прочее вещь, которую вы можете сделать, перепишите с третьим номером упаковки jar и перекомпилируйте.

+0

alse вы можете использовать собственный ClassLoader. DocumentBuilderFactory newInstance (String factoryClassName, ClassLoader classLoader) –

Смежные вопросы