2010-01-11 64 views
9

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

更新时间:

由于使用蓖麻我能做到这一点假设packageA.ClassApackageB.ClassA具有相同的属性和类的名称只是他们分别位于不同的包。

packageA.ClassA - > XML -> packageB.ClassA 

通过使用JAXB,如果我这样做马歇尔对象packageA.ClassA到XML和XML解组为对象packageB.ClassA我铸造错误。

回答

15

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

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

JavaWorld中有很棒的article。有点古老,但大多数的想法解释仍然很好。而且你不会找到提到JAXB注释的文章,这些注释现在让事情变得更加简单。

简单是一个易于使用的绑定框架,并以最小的“简单”配置工作。

DOM是一个不同的概念 - 它的全部内容都是关于解析和绑定。使用DOM解析器,您可以从XML中提取数据。但它不给你一个对象映射工具。所以你仍然需要使用DOM来获取数据,然后编写代码将这些数据推送到java对象。

+0

嗨,感谢您对DOM概念的解释非常清楚 – user236501 2010-01-11 07:13:45

+0

@newbie:如果你喜欢这个答案,请考虑接受它,或者至少给它一个upvote。谢谢! – 2010-06-16 18:02:54

3

由于给定的JAXBContext实例将每个根XML元素名称与一个绑定类相关联,因此会得到类转换异常。

因此,当您将packageA.ClassA编码为XML,然后再将其解组时,结果将为packageA.ClassA,并且您无法进行该操作。

如果你想解组编号为packageB.ClassA,那么你需要建立第二个JAXBContext。第一个JAXBContext知道约packageA.ClassA,第二个知道约packageB.ClassA。使用第一个用于编组到XML,第二个用于解组。这将按照您的预期工作。

相关问题