Могу ли я игнорировать дочерние пространства имен из @XmlRootElement - PullRequest
0 голосов
/ 06 ноября 2018

Я использую Kotlin 1.3, Java 8 и Spring 4.0+.

Просто я хочу прикрепить пространство имен только к <HELLO>, а не к его потомкам. Но когда я определяю пространство имен, используя @XmlRootElement для <HELLO>, тогда <HI> также получает пространство имен по умолчанию, даже если я не определяю никакого пространства имен.

@XmlRootElement(name = "HELLO", namespace = "http://www.hello.net")
public class Hello {

    @XmlElement(name = "HI")
    protected Hi hi;

тогда

    <HELLO xmlns="http://www.hello.net">
        <HI xmlns=""></HI>
    </HELLO>

Есть ли способ удалить xmlns="" (пространство имен по умолчанию) из <HI>?

К вашему сведению (после того, как закончите с ответом):

Я занимаюсь разработкой с Kotlin 1.3. Мне нужно использовать сгенерированные классы Java из XML с использованием xjc (JAXB), потому что спецификация программы (API) обрабатывается XML от внешнего клиента, который будет общаться с API.

При использовании xjc без опции -npa существует package-info.java для примените одно и то же пространство имен ко всем классам, сгенерированным всего двумя loc, и я экспортировал эти классы в мой проект. (ссылка: https://docs.oracle.com/javase/8/docs/technotes/tools/unix/xjc.html)

Я думал, что @ XmlSchema (namespace = "namespace1") в package-info.java хорошо работает, когда я регистрирую JaxbAnnotationModule () в XmlMapper (с JacksonXmlModule). Но, похоже, Jackson XmlMapper не полностью поддерживает xml-аннотации.

Вы можете решить эту проблему с помощью ответа ниже или добавив XmlMarshaller, который добавляет xmlns в XML.

jackson-dataformat-xml не поддерживает пространство имен уровня пакета: https://github.com/FasterXML/jackson-dataformat-xml/issues/18

1 Ответ

0 голосов
/ 06 ноября 2018

Если вы хотите, чтобы он унаследовал http://www.hello.net в выводе XML, вам нужно дать ему это пространство имен.

...