Что произошло с NamespacePrefixMapper JAXB в JDK6u18

Я использовал com.sun.xml.bind.marshaller.NamespacePrefixMapper в моем проекте, и у меня не было проблемы с ним в JDK 6u17. Теперь я просто обновил к 6u18, и я видел, что это было заменено к com.sun.xml.internal.bind.marshaller.NamespacePrefixMapper. Однако, если я импортирую этот класс и попытку скомпилировать мои классы, я получаю ошибку:

package com.sun.xml.internal.bind.marshaller does not exist
import com.sun.xml.internal.bind.marshaller.NamespacePrefixMapper;

Я могу получить доступ к этому пакету через функцию завершения кода NetBeans, и NetBeans не выделяет код для ошибок.

Любая справка ценилась бы!

25
задан Leonel 10 November 2016 в 16:12
поделиться

3 ответа

Я не думаю, что класс com.sun.xml.internal.bind.marshaller.NamespacePrefixMapper является заменой com.sun.xml.bind.marshaller.NamespacePrefixMapper , первая существует уже давно, и она НЕ ПРЕДНАЗНАЧЕНА ДЛЯ ВАС ИСПОЛЬЗОВАТЬСЯ ВООБЩЕ (отсюда и внутренняя упаковка ).

Проблема здесь в том, что JavaSE 6 не имеет JAXB RI (в нем есть реализация JAXB, но не JAXB RI), поэтому, если вы хотите полагаться на особую функцию RI, вам следует связать JAXB RI в своем приложении (и это защитит вас от изменений JAXB в Java SE).

18
ответ дан 28 November 2019 в 21:03
поделиться

Sun сделала что-то не совсем подходящее в данном случае. Отображение пространства имен не включено в спецификацию, но «рекламируется» как способ настройки префиксов. Таким образом, общий совет «не используйте com.sun. * » здесь не применяется, а javadoc этого класса говорит:

Реализуется пользовательским приложением для определить отображение URI -> префикса.

Прочтите статью и посмотрите, подойдет ли она вам.

4
ответ дан 28 November 2019 в 21:03
поделиться

Вы не должны использовать классы com.sun. ** напрямую. Они считаются внутренними и могут быть изменены без предварительного уведомления. (И посмотрите, что только что произошло !!) Тот факт, что новый класс имеет internal в имени пакета, является еще большим намеком!

Я настоятельно рекомендую вам найти лучший способ делать то, что вы делаете ... без использования классов com.sun. ** .

РЕДАКТИРОВАТЬ - хммм, похоже, тот, кто отвечает за JAXB RI, нарушил правила Sun об именах пакетов для этого расширения! К сожалению, Sun не реализовала это конкретное расширение RI в JDK 6.0.

4
ответ дан 28 November 2019 в 21:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: