Почему для пространства имен JAXB моего xml установлено значение по умолчанию ns1?
Я создал файл war из своего веб-приложения, используя NetBeans 7.2 (в среде Windows 7!), Который корректно работает на этапе тестирования с сервером GlassFish 3.1.2 в контексте NetBeans.
Определенное пространство имен в пределах package-info.java
файл правильно добавлен в мой XML-файл.
Однако когда я развертываю файл war на отдельно работающем сервере GlassFish на компьютере с Linux, для пространства имен устанавливается значение по умолчанию ns1, а НЕ то, которое определено файлом package-info.java?
Что я делаю неправильно?
С уважением, Джерард
1 ответ
Почему для пространства имен JAXB моего xml установлено значение по умолчанию ns1?
ns1
это не пространство имен, а префикс. Префикс не имеет значения. Например, следующие документы эквивалентны. foo
элемент находится в FOO
пространство имен, а bar
элемент находится в BAR
Пространство имен.
<a:foo xmlns:a="FOO" xmlns:b="BAR>
<b:bar>Hello World</b:bar>
</a:foo>
<ns1:foo xmlns:ns1="FOO" xmlns:ns2="BAR>
<ns2:bar>Hello World</ns2:bar>
</ns1:foo>
<foo xmlns="FOO" xmlns:b="BAR>
<b:bar>Hello World</b:bar>
</foo>
Что я делаю неправильно?
Ничего такого. Реализация JAXB (JSR-222) не обязана использовать префикс, указанный в @XmlSchema
аннотаций. EclipseLink JAXB (MOXy) делает, и последние версии JAXB RI появляются. Версия / реализация JAXB в NetBeans 7.2, как представляется, в то время как версия / реализация JAXB, которую использует GlassFish 3.1.2, этого не делает.
Ниже приведена ссылка на статью, которую я написал, которая немного более детальна и охватывает NamespacePrefixMapper
расширение, которое может быть полезно здесь.