Java JAXB2.1绑定定制选项

Java JAXB2.1绑定定制选项,java,jaxb,Java,Jaxb,我正在使用JAXB2.1从XSD文件生成Java对象。XSD文件中有多个表示业务模型实体的元素,这些元素具有诸如Account等常见名称。使用生成的文件来解组XML的系统在其域模型中有几个相互冲突的类名。虽然我们可以使用不同的包名来避免类名冲突,但我认为使用不同名称的对象更具可读性/可维护性 因此,我想修改XJC编译,以便它生成诸如DataTransferAccount.java等对象,而不是Account.java。超级,我将使用JAXB在绑定模式()时提供的两个选项之一: 内联定制—使用ja

我正在使用JAXB2.1从XSD文件生成Java对象。XSD文件中有多个表示业务模型实体的元素,这些元素具有诸如Account等常见名称。使用生成的文件来解组XML的系统在其域模型中有几个相互冲突的类名。虽然我们可以使用不同的包名来避免类名冲突,但我认为使用不同名称的对象更具可读性/可维护性

因此,我想修改XJC编译,以便它生成诸如DataTransferAccount.java等对象,而不是Account.java。超级,我将使用JAXB在绑定模式()时提供的两个选项之一:

  • 内联定制—使用jaxb命名空间对XSD本身进行注释,以指定类名
  • 外部绑定文件-向XJC提供一个额外的文件,XJC有关于如何将模式元素映射到java类的规则

  • 除了易用性之外,使用选项1还有什么好的理由吗?天真地说,我很想用它,因为它很简单,但在路上,如果我们决定远离JAXB XML解包,我会看到维护的头疼。

    你的直觉是好的。我唯一考虑的是将内联注释添加到模式中的情况是,如果你或你的开发人员是负责维护模式本身的人。p> 如果模式是其他人的,并且将来有任何更改的危险,那么请抵制诱惑-使用外部绑定定制。是的,使用起来有点尴尬,但值得努力


    至于最初的名称冲突问题,XML模式也不允许重复使用相同的名称。生成的Java中出现名称冲突的唯一方法是将多个名称空间中的模式编译到同一个Java包中。如果您有多个名称空间,我强烈建议您将每个名称空间放在自己的包中,它确实会使事情更清楚。它还避免了这些名称冲突。

    谢谢您的回答。关于名称冲突问题,我应该说得更具体一些——它是与应用程序中的XML模式对象和现有模型对象的名称冲突。但是是的,包命名可以解决这个问题。