在通过网络传递XML编组对象时,是否将XSD视为良好做法?

时间:2011-01-25 13:51:28

标签: xml xsd schema jaxb

我正在使用JAXB,JPA和RESTful Web服务的混合来通过网络传递对象。我的域对象包含JPA和JAXB注释的混合,并且我能够使用Spring的RestTemplate以最少的代码成功解组我的域对象。我记得不久前读过的东西(可能是SO的答案,可能是博客),作者认为他永远不会依赖生产环境中的注释,但总是根据模式进行编组和取消编组。这仍然是必要的做法吗?

如果我有一个带有注释bean的.jar,它是两个项目中的依赖项(例如生成RESTful Web服务和使用客户端),那么不会引入生成的XSD有效地添加另一组需要维护的数据吗?使用带注释的JAXB POJO时,何时需要模式以及它们提供哪些好处?

3 个答案:

答案 0 :(得分:1)

在开发和测试环境中,模式验证非常有用(例如,检测不同版本的代码),在生产中,您最好将其关闭。除非您正在与之通信的系统是由其他人开发的,否则XSD验证可以帮助快速有效地转移责任。

答案 1 :(得分:1)

只要服务的所有用户都是Java客户端,我同意它不会给您带来太多帮助,只会增加额外的维护工作量。但是,如果您计划拥有非Java客户端,那么生成XSD(可能作为自动构建的一部分,这将最大限度地减少维护开销)是有道理的。

答案 2 :(得分:1)

JAXB将其元数据表示为注释,因此根据XML架构确实没有marshal / unmarshal。

我领导MOXy的JAXB组件(EclipseLink),该组件最适合JPA implementation。我对开发人员的建议是使用JAXB和amp;的组合。 JPA注释他们的模型。

使用XML架构:

  • 作为mentioned by biziclop JAXB可以在编组/解组操作期间利用XML Schema来执行验证。
  • XML模式还为RESTful服务的客户端提供了一种方法,以了解预期的XML消息的外观。作为mentioned by Fabian Steeg,您可以通过将其作为构建的一部分创建来使架构更易于维护。