我正在使用 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 进行开发。我需要使用使用 xjc(JAXB) 从 XML 生成的 Java 类,因为程序 (API) 规范是由来自外部客户端的 XML 处理的,它将与 API 通信。
当使用没有 -npa 选项的 xjc 时,有一个package-info.java用于对仅使用两个 loc 生成的所有类应用相同的命名空间,并且我在我的项目中导出了这些类。(参考:https ://docs.oracle.com/javase/8/docs/technotes/tools/unix/xjc.html )
当我在 XmlMapper(使用 JacksonXmlModule)中注册 JaxbAnnotationModule() 时,我认为package-info.java 中的 @XmlSchema(namespace = "namespace1")效果很好。但是,杰克逊 XmlMapper 似乎并不完全支持 xml 注释。
您可以通过以下答案或添加将 xmlns 添加到 XML 的 XmlMarshaller 来解决此问题。
jackson-dataformat-xml 不支持包级别的命名空间:https ://github.com/FasterXML/jackson-dataformat-xml/issues/18