Я использовал 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 не выделяет код для ошибок.
Любая справка ценилась бы!
Я не думаю, что класс 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).
Sun сделала что-то не совсем подходящее в данном случае. Отображение пространства имен не включено в спецификацию, но «рекламируется» как способ настройки префиксов. Таким образом, общий совет «не используйте com.sun. *
» здесь не применяется, а javadoc этого класса говорит:
Реализуется пользовательским приложением для определить отображение URI -> префикса.
Прочтите статью и посмотрите, подойдет ли она вам.
Вы не должны использовать классы com.sun. **
напрямую. Они считаются внутренними и могут быть изменены без предварительного уведомления. (И посмотрите, что только что произошло !!) Тот факт, что новый класс имеет internal
в имени пакета, является еще большим намеком!
Я настоятельно рекомендую вам найти лучший способ делать то, что вы делаете ... без использования классов com.sun. **
.
РЕДАКТИРОВАТЬ - хммм, похоже, тот, кто отвечает за JAXB RI, нарушил правила Sun об именах пакетов для этого расширения! К сожалению, Sun не реализовала это конкретное расширение RI в JDK 6.0.