【问题标题】:Replacing XStream with JAXB in my application在我的应用程序中用 JAXB 替换 XStream
【发布时间】:2011-12-03 18:58:11
【问题描述】:

目前在应用程序中,我们得到一个 SOAP 响应 xml,其中每个元素都附加了命名空间。我已经硬编码到我的代码中,因为应用程序需要干净的 xml,所以忽略了命名空间。但是在测试时,它被认为是一个弱解决方案,因为名称空间将来可能会发生变化。 有人建议我使用 jaxb。我目前正在使用 xtream,因为我们可以直接读取 xml。所以我开始研究jaxb。但是 jaxb 需要 xsd。我已经理解了这个过程,但我不确定如何在我的应用程序中实现 Jaxb,因为我收到了一个 xml 响应。 所以,我的问题是在这种情况下可以用 jaxb 替换 xtream 吗?
谢谢

【问题讨论】:

  • 我也可以使用 xslt 来删除命名空间吗?
  • "但是 jaxb 需要 xsd" - 不正确,它不需要这样的东西。你可能想做更多的背景阅读,你的假设有点偏离。
  • @skaffman 你能详细说明一下吗?因为我是 jaxb 的新手,从 wat 我看到从 xml 到 java 对象的转换需要 xsd 来运行 xjc 绑定编译器。
  • 您可能会发现以下文章很有帮助。它使用 JAXB 和 XStream 将相同的对象映射到 XML:blog.bdoughan.com/2010/10/how-does-jaxb-compare-to-xstream.html
  • 哇,这正是我所需要的。非常感谢。

标签: xml soap namespaces jaxb xstream


【解决方案1】:

注意:我是 EclipseLink JAXB (MOXy) 的负责人,也是 JAXB 2 (JSR-222) 专家组的成员。

我目前正在使用 xtream,因为我们可以直接读取 xml。所以我 已经开始研究 jaxb。但是 jaxb 需要 xsd。

JAXB 需要 XML 模式是一个常见的误解(它甚至在 XStream FAQ 上)。事实上,JAXB 被设计为从对象开始,并提供了从 XML 模式生成带注释的对象模型的选项。这在处理大型 XML 模式时非常有用:

目前在应用程序中,我们得到一个带有命名空间的 SOAP 响应 xml 附在每个元素上。我已经硬编码到我的代码中 名称空间被忽略,因为应用程序需要干净的 xml。但 在测试时它被认为是一个弱解决方案,因为命名空间 未来可能会改变。

JAXB 对映射命名空间有很好的支持。这可以在包级别使用@XmlSchema,在类级别使用@XmlType,或在字段/属性级别使用@XmlAttribute/@XmlElement

我已经了解流程,但我不确定如何实现 Jaxb 在我的应用程序中,因为我收到了 xml 响应

下面是一篇文章的链接,该文章使用 JAXB 和 XStream 将同一对象模型映射到同一 XML 文档。它将让您了解一些概念之间的关系:

另外需要注意的是,JAXB 指的是标准 (JSR-222),而不是特定的实现。实际上有几种实现方式,包括:

  • EclipseLink MOXy
  • Metro(参考实现)
  • Apache JaxMe

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-26
    • 2013-07-26
    • 1970-01-01
    • 2014-01-18
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    相关资源
    最近更新 更多