【发布时间】:2018-11-06 14:05:10
【问题描述】:
我正在使用 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>
有没有办法从<HI> 中删除xmlns=""(默认命名空间)?
仅供参考(回答完毕后):
我正在使用 Kotlin 1.3 进行开发。我需要使用生成的 Java 类 从 XML 使用 xjc(JAXB),因为程序 (API) 规范由 XML 处理 来自将与 API 通信的外部客户端。
当使用没有 -npa 选项的 xjc 时,有一个 package-info.java 用于 对仅使用两个 loc 生成的所有类应用相同的命名空间,然后我在我的项目中导出了这些类。 (参考:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/xjc.html)
我认为 @XmlSchema(namespace = "namespace1") in package-info.java 当我在 XmlMapper(使用 JacksonXmlModule)中注册 JaxbAnnotationModule() 时效果很好。但是,杰克逊 XmlMapper 似乎并不完全支持 xml 注释。
您可以通过以下答案或添加将 xmlns 添加到 XML 的 XmlMarshaller 来解决此问题。
jackson-dataformat-xml 不支持包级命名空间:https://github.com/FasterXML/jackson-dataformat-xml/issues/18
【问题讨论】:
-
很抱歉,您是如何使用 Kotlin 1.6 的? 1.3 刚刚发布,1.6 甚至还远未在发布时完成 alpha 开发
-
@zoe 抱歉,已编辑。我使用了 Kotlin 1.3。我对 JVM 版本 1.6 Kotlin 使用感到困惑
-
找到了一个有趣的解决方案:github.com/FasterXML/jackson-dataformat-xml/issues/…
标签: xml kotlin namespaces xml-namespaces package-info