Java转XSD或XSD转Java

7
4个回答

6

最终取决于你想要关注的重点:

如果XML Schema是最重要的

那么最好从XML schema开始生成一个JAXB模型。有些XML schema的细节,JAXB (JSR-222)实现无法生成:

  • maxOccurs不为0、1或未限定的
  • 简单类型上的许多facets
  • 模型组

如果对象模型是最重要的

如果你将使用Java模型进行更多操作而不仅仅是在对象和XML之间转换(例如与JPA一起使用进行持久化),那么我建议从Java对象开始。这将给你最大的控制权。


我们正在使用JAXB来在REST Web服务之间传输数据。有时候,我们可能已经有可用于生成XSD的bean/DTO。有时候,我们将从头开始创建这些bean。我猜想,在这些情况下,我们的对象模型是最重要的事情,你同意吗?XSD仅用于在创建传输数据的对象的步骤中。 - medloh

1

这取决于您的需求和场景,尤其是起始点。

根据您的要求,使用从XSD生成Java文件,因为您想首先定义Java支持的输出(XML)格式。


1

考虑到 XML 的主要优点之一是作为可移植的数据传输格式,无论平台或语言都可以使用,因此我建议避免从任何特定编程语言生成 XSD。这是一个经验法则。如果您知道只在 Java 端点之间通信,则可能并不重要(但您确定这将永远成立吗?)。

所有其他条件相等的情况下,最好以编程语言中立的方式定义接口/模式。

当然,有很多例外情况,特别是如果您正在集成现有或遗留代码...


2
一个JAXB(JSR-222)实现生成的XML模式与Java无关。 - bdoughan
2
很好。不过,我的经验是,如果从编程语言开始,与从XSD开始,最终得到的模式往往会有很大不同,这是由于语言的不同风格和特性所致。如果从模式编辑器开始,则产生的设计通常也会不同(更好的因素分解,但可读性较差),而如果从示例XML开始,然后根据其反向工程出模式,则结果也会不同。 - DNA
我见过设计精良、手工制作且有效的模式,通过JAXB可以很好地导入,但无法为.NET 4生成类。然而,我从未见过由JAXB类生成的模式出现这种情况。当然,你是对的,这种方法往往会产生不同的模式。特别是深层结构的XML会生成一些在代码中从头开始创建起来非常混乱的POJOs。 - Petter Nordlander
假设从POJO生成的模式可能存在相同的问题(即如果.NET不遵循标准,则几乎任何非.NET方法生成的模式都不能保证与其互操作)? - DNA
理论上是可以的。但实际上,我的经验与引用的重复使用有关。我从未见过JAXB生成这个问题。 - Petter Nordlander

1
如果您有机会设计POJO和模式,则是一个设计问题 - 您是为“完美”的模式设计还是为“完美”的Java类设计。在某些情况下,您没有选择的余地,在系统集成方案中,您可能会收到另一个系统预定义的XSD,您需要对其进行适应,那么XSD->类将是唯一的方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接