Я использую 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