Castor XML和JAXB绑定有什么区别,因为它们都是将Java对象绑定到XML,反之亦然。
已更新:
使用Castor我可以这样做假设packageA.ClassA
和packageB.ClassA
具有相同的属性和类名,只是它们位于不同的包中。
packageA.ClassA - > XML -> packageB.ClassA
通过使用JAXB,如果我正在将此Marshall对象packageA.ClassA
用于XML,并从XML解组到对象packageB.ClassA
,则会出现Casting错误。
答案 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,第二个用于解组。这将按预期工作。