Я создал простую службу Spring3, Hibernate3/(JPA2), RESTful, размещенную на Tomcat6, которая использует JAXB2 для маршалинга результатов. (Он использует аннотированные pojos.) Мне нужно было использовать определенные префиксы пространств имен, поэтому я написал собственный com.sun.xml.bind.marshaller.NamespacePrefixMapper. Я включил jar-файлы JAXB2 RI в свое приложение, и все заработало нормально.
Потом кто-то сказал, что это здорово, нам нужно разместить его и под WebLogic 11g (10.3.3). Нет проблем, я создал специальные дескрипторы развертывания weblogic, чтобы предпочесть jar-файлы приложения, переименовал свой файл persistence.xml и завернул WAR в EAR с jar-файлами JPA2. Это работало отлично, почти.
К сожалению, на нашем сервере WebLogic работает пользовательская область безопасности, которая также использует JAXB и вызывает конфликты с моим приложением. Поэтому я удалил файлы JAXB из приложения, и оно отлично работает в WebLogic. Конечно, он больше не работает под Tomcat, если я не добавлю банки JAXB в Tomcat. Я хотел бы избежать этого.
Итак, мои вопросы... Я прочитал довольно много сообщений о stackoverflow, которые содержат много мнений/разногласий относительно использования "внутренней" реализации Sun JAXB2 по сравнению с упаковкой RI с вашим приложением. Нет ли еще чистого решения этой проблемы? Поддерживает ли мой стек другой способ пользовательского сопоставления префиксов пространства имен без включения JAXB2 RI? Могу ли я безопасно использовать «внутренний» JAXB NamespacePrefixMapper Java6, или он будет появляться и исчезать с различными выпусками Java? Предлагает ли Spring3 другое решение? Какова правдивая история реализации Java6 JAXB2? Это только для внутреннего использования Sun (Oracle)?
Спасибо.
com.sun.xml
, которые идут с ним, напримерNamespacePrefixMapper
. Если вы используете встроенный Java6 JAXB, вы должны использовать пакетыcom.sun.xml.internal
, что крайне нежелательно. - person skaffman   schedule 05.01.2011