使用XJC(JAXB)从XML模式定义生成Java类的问题

时间:2009-08-13 03:30:32

标签: java xml jaxb

我有一个看起来像这样的XML和一个相应的xsd。

<books>
  <book name="book1" id="book1">
    <name>Harry Potter</name>
  ...........
  </book>
  ...........
</books>

请注意'name'出现两次,一次作为标记中的属性,也作为标记下的元素。显然这是无效的语法,我不确定。

当我尝试使用xjc命令(JAXB)为此生成java类时,它会计算xsd文件中无效的重复条目。

但是,我能够在VS 2008中为xsd using xsd命令生成C#类。

我有三个问题。

  1. 这种XML语法错了吗?

  2. 为什么xjc(of JAXB)报告错误而xsd(VS2008)报告错误?

  3. 有什么方法可以让xjc(JAXB)生成类(我不需要改变XML / XSD文件)?

  4. 我不想改变XML / XSD文件,因为它是20,000行文件。但这是我的最后一个选择。

1 个答案:

答案 0 :(得分:3)

  1. 架构没有错,但设计很差。对属性和子元素使用相同的名称会让人感到困惑,尽管它是合法的。
  2. 因为它们是为不同语言生成代码的不同工具。
  3. XJC可以使用“绑定自定义”,它可以影响它生成代码的方式。这包括为任何给定的schema元素更改生成的java名称的功能。这在JAXB tutorial中有记载(见第5章,特别是5.3)