java – JAXB和complexType共享名称与其中一个元素生成不正确的代码

我有这个xsd有点坏,但我必须使用它来避免更改我正在编写的servlet的接口.请求 – 响应接口的xsd包含以下行:

<xs:complexType name=”Foo”>
    <xs:sequence minOccurs=”0” maxOccurs=”unbounded”>
        <xs:element name=”Foo”>
        ...
        </xs:element>
    ...
    </xs:sequence>
<xs:complexType>

请注意名称冲突.当我使用maven-jaxb-plugin从这个模式生成类时,我最终得到:

Public class Foo {
...

   public List<Foo.Foo> getFoo() {
   ...
   }

   ...

   public static class Foo {
   ...
   }
}

当然,这无法编译,因为不允许在嵌套类和封闭类上使用相同的名称.如果不更改xsd,我该怎么做才能解决这个问题?我知道你可以通过在xsd中添加jaxb的标签来覆盖名称.这样做安全吗?它会对服务的界面产生影响吗?

最佳答案 您可以使用外部绑定文件来自定义生成的类名.有关示例,请参阅:

> JAXB: How to change XJC-generated classes names when attr type is specified in XSD?

点赞