[英]JAXB - Beans to XSD or XSD to beans?
我有一个现有的数据模型。 我想用XML来表达这个数据模型。
如果我要使用JAXB,看起来我有两个选择:
我可以看到两种方法的优点和缺点。 似乎大多数使用JAXB的人都是从XSD文件开始的。 因为它以真正的跨平台方式表达数据模型,所以XSD应该是黄金标准的真理是有道理的。
我倾向于先从XSD开始,但是我必须编写并维护一个单独的映射类来运行我的世界和JAXB世界之间的数据似乎很蠢。
有什么建议?
从现有类生成的XSD听起来像是最安全的方式。
然而,除非你很了解JAXB,否则注意你自己的类的方法可能会变得非常令人沮丧(在痛苦和时间:))。
如果你坚持使用JAXB,那么我建议考虑使用第一种方法(XSD + XJC)作为获取类的初始JAXB注释的方法。
您可以使用XSD + XJC来了解如何注释自己的类。 然后,您可以尝试将正确的注释放在它们上面。 早期从更复杂的类(引用,继承,引用列表,对抽象基类的引用列表)开始。
如果这项工作的目的是也能够将实例编组为XML,那么我建议关注JAXBElement。 在某些情况下(由于缺乏知识,我无法指出)实例不会编组,除非它们被包装在JAXBElement中。
在线之间阅读,我相信以下是真的:
此场景通常称为“中间相遇”映射。 它只是由JAXB部分解决。 幸运的是,由于JAXB是一个规范,因此您可以使用其他实现,例如EclipseLink JAXB(MOXy)。
MOXy提供了一个基于XPath的映射扩展,允许您在您拥有的Java模型和所需的XML模式之间进行映射:
您可以使用xjc,但仍然只有一个带有XML注释的类将服务器作为数据对象。 但是,如果你没有在每个构建的类上重新生成类。
正如我所认为的代码生成一样,对于从何处开始的问题,我建议从类开始。 因为如果您将类作为起点,则永远不需要重新生成这些类。 随着时间的推移,您的类开始增长 - 包括@XmlTransient
,继承,辅助方法和其他(JPA)注释。
你几乎是JAXB最糟糕的起点。 在你的位置,我认为JiBX可能是一个更好的选择,它可以从非注释的类模型生成模式,然后在运行时将XML绑定在对象模型上,而不使用注释。
我们使用的解决方案是拥有一个单独的项目,其中包含由xml架构定义的所有数据模型,使用JAXB从中派生java类。 使用数据模型的其他项目依赖于此模式包。
通过这种方式,项目之间的所有“契约”都使用友好的可移植xsd表示在一个地方定义。 不需要任何映射类,因为我们只是直接使用JAXB生成的映射类。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.