无论@XmlTransient如何,JAXB JXC都会为枚举生成架构

时间:2011-10-19 23:19:02

标签: java xsd jaxb schemagen

使用JXC模式生成ant任务,我似乎无法忽略枚举。我有几个枚举,在内部用于表示与生成的XML无关的类型或次要配置值。

我可以使用enum将字段排除为@XmlTransient,以将其从对象的模式中排除,但仍然会为枚举生成simpleType描述符!

示例:

public class CustomerType { 

    @XmlTransient    
    public enum IsolationLevel { ALL, SAME_TYPE, SELECTED }

    @XmlTransient
    private Long id;
    @XmlValue
    private String name;
    @XmlTransient
    private IsolationLevel isolation = IsolationLevel.ALL;
}

生成的架构:

<xs:simpleType name="isolationLevel">
    <xs:restriction base="xs:string">
      <xs:enumeration value="ALL"/>
      <xs:enumeration value="SAME_TYPE"/>
      <xs:enumeration value="SELECTED"/>
    </xs:restriction>
</xs:simpleType>

任何人对如何让JXC忽略枚举有任何想法?它没有被任何XML映射的属性或字段使用,并且枚举本身被标记为@XmlTransient - 为什么它仍然是我的模式的一部分?

1 个答案:

答案 0 :(得分:0)

我也遇到了这个问题并将我的pom更新为2.2.11,至少对于那个版本是固定的。评论中提到的Jira bug也说明它已在2.2.5中修复。在这样做时,我必须添加三个依赖项,如下所示:

<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.2.12</version>
</dependency>
<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-impl</artifactId>
    <version>2.2.11</version>
</dependency>
<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-core</artifactId>
    <version>2.2.11</version>
</dependency>