12

Castor XML 和 JAXB 绑定之间有什么区别,因为两者都将 java 对象绑定到 XML,反之亦然。

更新 :

在使用 Castor 时,我可以假设packageA.ClassA并且packageB.ClassA具有相同的属性和类名,只是它们位于不同的包中。

packageA.ClassA - > XML -> packageB.ClassA 

packageA.ClassA如果我将这个 Marshall 对象转换为 XML 并从 XML 解组到对象,则通过使用 JAXB,packageB.ClassA我得到了 Casting 错误。

4

2 回答 2

16

请注意,JAXB 是一种 API,并且有多种实现可用。

Sun 提供了一个参考实现并将其与 J2EE 打包在一起(它在 J2SE 1.6 中也可用)。Castor 在 JAXB 从 Sun 出来之前就诞生了,它提供了一些额外的功能。但是,如果您想要的只是简单的 XML 绑定,那么参考 Sun 实现应该可以很好地工作。

JavaWorld 中有一篇很棒的文章。有点旧,但大多数想法在那里解释仍然有效。而且您不会找到提到 JAXB 注释的文章,这让现在的事情变得更容易了。

Simple 是一个易于使用的绑定框架,可以使用最少的“简单”配置。

DOM 是一个完全不同的概念——它只涉及解析,而与绑定无关。使用 DOM 解析器,您可以从 XML 中提取数据。但它没有为您提供对象映射工具。所以你仍然必须使用 DOM 拉取数据,然后编写代码将这些数据推送到 java 对象。

于 2010-01-11T06:41:37.257 回答
3

JAXBContext因为给定实例将每个根 XML 元素名称与一个绑定类相关联,所以您会得到类转换异常。

因此,当您编组packageA.ClassA为 XML,然后再次将其解组时,结果将是 a packageA.ClassA,并且您不能强制转换它。

如果要解组到 a packageB.ClassA,则需要构建第二个JAXBContext。第一个JAXBContext知道packageA.ClassA,第二个知道packageB.ClassA。将第一个用于编组为 XML,第二个用于解组。这将按您的预期工作。

于 2010-06-07T21:14:12.920 回答