jaxb.properties в файле JAR - PullRequest
       16

jaxb.properties в файле JAR

2 голосов
/ 06 июня 2011

Я использую JAXB версии 2. Я использую версию Sun, чтобы я мог использовать замену пространств имен, которые не работают со стандартной реализацией.Это все прекрасно работает, когда мои классы находятся в одном пакете приложения, а файл jaxb.properties находится вместе с классами модели.

Когда я перемещаю их все в отдельный lib, файл jar,замена пространства имен не работает, и все пространства имен остаются маршалом ns1.Таким образом, мне кажется, что он не выбирает определение фабрики контекста, определенного в моем файле jaxb.properties, и по умолчанию использует стандартную версию Java.

Есть идеи, что может происходить или как это исправить?Спасибо за чтение.

Ответы [ 3 ]

3 голосов
/ 06 июня 2011

Ваша настройка

Когда я перемещаю все это в отдельный lib, файл jar, затем пространство имен замена не работает и все пространства имен по-прежнему ns1 на маршал.

В этой настройке у вас есть классы моделей и jaxb.properties в одном и том же файле jar? Вам нужно убедиться, что jaxb.properties все еще находятся в том же пакете, что и классы вашей модели:

  • ком \ например \ Foo.class
  • ком \ например \ Bar.class
  • ком \ например \ jaxb.properties

jaxb.properties не найден исключение.

Ваши jaxb.properties найдены?

Нет исключения, если файл jaxb.properties отсутствует, поскольку среда выполнения JAXB по умолчанию будет просто использовать значение JAXB impl (либо RI, либо определено с помощью механизма META-INF/services. Вы можете проверить, является ли оно найти ваш файл jaxb.properties по недопустимой записи JAXBContextFactory, это создаст исключение, например:

javax.xml.bind.context.factory = INVALID_ENTRY

приведет к следующему исключению:

Exception in thread "main" javax.xml.bind.JAXBException
 - with linked exception:
[java.lang.ClassNotFoundException: INVALID_ENTRY]
    at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:187)
    at javax.xml.bind.ContextFinder.find(ContextFinder.java:331)
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:574)
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:522)
    at forum22.Demo.main(Demo.java:10)
Caused by: java.lang.ClassNotFoundException: INVALID_ENTRY
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
    at javax.xml.bind.ContextFinder.safeLoadClass(ContextFinder.java:481)
    at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:185)
    ... 4 more
2 голосов
/ 07 июня 2011

Как оказалось, проблема с моим файлом JAR.Я скопировал package-info.java в мой JAR-файл в сборке, но не скопировал скомпилированный package-info.class.

Включение обоих пакетов-info.java и .class решило проблему.

Спасибо за чтение и большое спасибо за ответы.

1 голос
/ 06 июня 2011

Вы пытались поместить его в каталог META-INF/services в файле jar?

...