Как заставить вывод JAXB включать пространство имен в дочерний узел без префикса?

#namespaces #jaxb #prefix

#пространства имен #jaxb #префикс

Вопрос:

Видит бог, я искал на форуме ответ, но не увидел ни одного. Это упрощенный XML, который считывает мой код JAXB. Задействовано 2 пространства имен. xyz и abc. Эти два определены в двух разных файлах схемы. И xjc генерирует для них два разных пакета. Следующий файл хорошо считывается в эти классы и может даже записывать его.

 <xyz:xyz xsi:schemaLocation="urn:xyz xyz.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xyz="urn:xyz">
    <session>
        <App xsi:schemaLocation="urn:abc abc.xsd" xmlns="urn:abc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <AppItem att1="1234"/>
        </App>
    </session>
</xyz:xyz>
  

Вот как он это записывает.

 <ns3:xyz xmlns:ns2="urn:abc" xmlns:ns3="urn:xyz">
    <session>
        <ns2:App>
            <ns2:AppItem att1="1234"/>
        </ns2:App>
    </session>
</ns3:xyz>
  

Теперь я знаю о NamespacePrefixMapper и могу изменить ns2 и ns3 на нужные мне значения. И я хочу это. В принципе, я хочу сохранить исходную форму XML. Элемент App должен содержать всю свою информацию сам по себе, а не создавать префикс.

 <xyz:xyz xmlns:xyz="urn:xyz">
    <session>
        <App xsi:schemaLocation="urn:abc abc.xsd" xmlns="urn:abc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <AppItem att1="1234"/>
        </App>
    </session>
</xyz:xyz>
  

У кого-нибудь есть какие-либо подсказки относительно того, как этого добиться? Похоже, что некоторые настройки в AppType.java следует сообщить автору, чтобы он не обновлял корневой элемент с префиксом.

Комментарии:

1. Итак, я хочу создать один префикс (ns3 или xyz), но я не хочу, чтобы создавался другой (ns2).

2. Это нормально, если xsi: schemaLocation и xmlns: xsi не указаны в App element, но мне нужно xmlns =»urn: abc» и без префикса для этого пространства имен.