我可以忽略@XmlRootElement子命名空间吗



我使用的是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类使用xjc(JAXB(从XML,因为程序(API(规范由XML处理来自将与API通信的外部客户端。

当使用不带-npa选项的xjc时,有一个包info.java用于在仅使用两个loc生成的所有类上应用相同的命名空间,然后我在项目中导出了这些类。(参考:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/xjc.html)

我认为当我在XmlMapper中(使用JacksonXmlModule(注册JaxbAnnotationModule((时,包info.java中的@XmlSchema(namespace="namespace1"(运行良好。但是,Jackson XmlMapper似乎并不完全支持xml注释。

您可以通过下面的答案或添加XmlMarshaller来解决这个问题,XmlMarshalller将xmlns添加到XML中。

jackson数据格式xml不支持包级别的命名空间:https://github.com/FasterXML/jackson-dataformat-xml/issues/18

如果希望它继承XML输出中的http://www.hello.net,则需要为它提供该名称空间。

最新更新