Castor XML绑定和JAXB绑定之间有什么区别

时间:2010-01-11 06:15:03

标签: java xml jaxb castor

Castor XML和JAXB绑定有什么区别,因为它们都是将Java对象绑定到XML,反之亦然。

已更新:

使用Castor我可以这样做假设packageA.ClassApackageB.ClassA具有相同的属性和类名,只是它们位于不同的包中。

packageA.ClassA - > XML -> packageB.ClassA 

通过使用JAXB,如果我正在将此Marshall对象packageA.ClassA用于XML,并从XML解组到对象packageB.ClassA,则会出现Casting错误。

2 个答案:

答案 0 :(得分:16)

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

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

JavaWorld中有一个很棒的article。有点旧,但大多数想法解释仍然有效。你不会发现文章提到JAXB注释,这使得现在的事情更容易。

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

DOM是一个完全不同的概念 - 它的全部内容都是关于解析而不做任何关于绑定的。使用DOM解析器,您可以从XML中提取数据。但它没有给你一个对象映射工具。因此,您仍然必须使用DOM提取数据,然后编写代码将此数据推送到java对象。

答案 1 :(得分:3)

您获得了类强制转换异常,因为给定的JAXBContext实例将每个根XML元素名称与一个绑定类相关联。

因此,当您将packageA.ClassA封送到XML,然后再将其解组时,结果将为packageA.ClassA,并且您无法强制转换它。

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