gpt4 book ai didi

java - JAXB+骡子。避免在 XML 转换中使用 namespace

转载 作者:太空宇宙 更新时间:2023-11-04 06:42:17 25 4
gpt4 key购买 nike

我是 JAXB 和 Mule 的新手。我们有一个可以连接到各个第三方的应用程序,每个第三方都提供自己的 XSD 来定义消息模式。

如果我为每个第三方定义不同的 JAXBContext 对象,则会收到“多个 JAXBContext 已注册”错误。因此,我有一个上下文,其中 packageNames 用冒号分隔(例如“com.myorg.pack1:com.myorg.pack2:com.myorg.pack3”)

现在我看到消息中生成了命名空间,即使 XSD 的元素配置为不合格。这只发生在根节点上。

不幸的是,如果存在命名空间,我正在交互的第 3 方不会给出响应。

有没有办法不使用命名空间?任何指示将不胜感激

最佳答案

当您的 XML 架构中有 elementFormDefault="qualified" 时,这仅意味着只有全局(顶级)元素是命名空间限定的。在 JAXB 中,@XmlRootElement 对应于全局元素。无论您如何创建 JAXBContext,此元素都将是命名空间限定的。

更新

got it, thanks. so there's really no way to avoid namespaces?

如果 XML 模式包含 targetNamespace 属性,那么它将需要 XML 文档中的命名空间限定。如果它指定 elementFormDefault="unqualified",则只有全局(顶级)元素是命名空间限定的。这意味着不能使用默认的命名空间前缀。这意味着:

  1. 如果您希望 XML 文档对您的 XML 架构有效,则无法避免命名空间。
  2. 您可以从 JAXB 模型中删除所有命名空间映射(即 package-info 类上的 @XmlSchema,或 @XmlRootElement@XmlElement 等上的命名空间属性),但这样 XML 对于 XML 架构将无效。

关于java - JAXB+骡子。避免在 XML 转换中使用 namespace ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24522434/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com