Почему для пространства имен 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 расширение, которое может быть полезно здесь.

Другие вопросы по тегам