Java到XSD或XSD到Java

Java到XSD或XSD到Java,java,xsd,jaxb,pojo,Java,Xsd,Jaxb,Pojo,我知道,使用JAXB,您可以而且也可以。每种方法的优缺点是什么?一个整体上比另一个好吗 我们基本上希望将事件序列化为XML格式的日志。这取决于您对启动点的需求和场景 根据您的要求,使用从XSD生成Java文件,因为您希望首先定义Java支持的输出(XML)格式。鉴于XML的一个要点是成为一种可移植的数据传输格式,无论平台或语言如何都可用,根据经验,我会避免从任何特定的编程语言生成XSD。如果您知道您只在Java端点之间通信,这可能无关紧要(但您确定这永远都是真的吗?) 在其他条件相同的情况下,最

我知道,使用JAXB,您可以而且也可以。每种方法的优缺点是什么?一个整体上比另一个好吗


我们基本上希望将事件序列化为XML格式的日志。

这取决于您对启动点的需求和场景


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

鉴于XML的一个要点是成为一种可移植的数据传输格式,无论平台或语言如何都可用,根据经验,我会避免从任何特定的编程语言生成XSD。如果您知道您只在Java端点之间通信,这可能无关紧要(但您确定这永远都是真的吗?)

在其他条件相同的情况下,最好以与编程语言无关的方式定义接口/模式


这个一般原则有很多例外,特别是当您与现有或遗留代码集成时……

如果您有机会同时设计pojo和模式,那么这是一个设计问题—您是为“完美”模式还是为“完美”java类而设计


在某些情况下,您没有选择的余地,在系统集成场景中,您可能会从另一个系统中获得一个预定义的XSD,您需要适应,然后XSD->Class将是唯一的方法。

最终取决于您希望关注的地方:

如果XML模式是最重要的

然后最好从XML模式开始,生成一个JAXB模型。以下是JAXB(JSR-222)实现无法生成的XML模式的详细信息:

  • 最大值不是0、1或无界值
  • 简单类型上的许多方面
  • 模型组
如果对象模型是最重要的


如果您使用Java模型不仅仅是为了在对象和XML之间进行转换(即,将其与JPA一起用于持久化),那么我建议您从Java对象开始。这将为您提供最大的控制。

JAXB(JSR-222)实现生成的XML模式没有Java特有的内容。很好。然而,根据我的经验,由于语言的风格和特性不同,从编程语言开始的模式往往与从XSD开始的模式完全不同。与从示例XML开始相比,从模式编辑器开始也会产生不同的设计(考虑因素更好,但可读性较差),然后从中反向设计模式。我见过设计良好、手工制作且有效的模式,这些模式通过JAXB很好地导入,但无法为.NET 4生成类。不过,我从未见过从JAXB类生成的模式会出现这种情况。当然,您是对的,这种方法倾向于给出不同的模式。特别是,深层结构的XML给POJO带来了一个乱七八糟的代码。从POJO生成的模式可能也会有同样的问题(即,如果.NET不遵循该标准,几乎任何非.NET模式生成方法都不能保证与它互操作)?理论上,是的。但在实践中,我的经验与引用的重用有关。还从未见过JAXB产生这种问题。我们正在使用JAXB向RESTWeb服务传输数据,并从中传输数据。有时我们可能已经有了可用的bean/dto,可以用来生成xsd。有时我们会从头开始,创建这些bean。我猜在这些情况下,我们的对象模型是最重要的,你同意吗?XSD只用于创建用于传输数据的对象的一个步骤。