【问题标题】:Can i ignore child's namespaces from @XmlRootElement我可以忽略来自@XmlRootElement 的孩子的命名空间吗
【发布时间】: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>

有没有办法从&lt;HI&gt; 中删除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


【解决方案1】:

如果您希望它继承 XML 输出中的 http://www.hello.net,那么您需要为其指定命名空间。

【讨论】:

  • 天哪,这是一个愚蠢的问题。我不知道它会巧妙地继承命名空间。感谢您快速回复愚蠢的问题。
  • 哦,但作为您的解决方案,我应该将该命名空间写入“Hello”的所有子类。有什么解决办法吗?只是在“Hello”类级别上剪掉它?
  • 我是根据 XML 知识而不是 Java 知识来回答的,所以我不知道是否有一种方便的方式可以使用您的特定工具包说“只继承命名空间”。
  • 好的,谢谢你的回答:)
猜你喜欢
  • 1970-01-01
  • 2010-10-26
  • 2013-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-28
  • 1970-01-01
  • 2011-12-05
相关资源
最近更新 更多