【问题标题】:JAXB - XJC - influencing generated typesafe enum class and membersJAXB - XJC - 影响生成的类型安全枚举类和成员
【发布时间】:2008-10-20 11:10:12
【问题描述】:

使用 XJC 编译器(来自 JAXB 包)编译以下 simpleType 时...

<xs:simpleType name="test">
    <xs:annotation>
        <xs:appinfo>
            <jaxb:typesafeEnumClass/>
        </xs:appinfo>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:enumeration value="4">
        <xs:annotation>
          <xs:appinfo>
            <jaxb:typesafeEnumMember name="FOUR"/>
          </xs:appinfo>
        </xs:annotation>
      </xs:enumeration>      
      <xs:enumeration value="6">
        <xs:annotation>
          <xs:appinfo>
            <jaxb:typesafeEnumMember name="SIX"/>
          </xs:appinfo>
        </xs:annotation>
      </xs:enumeration>
     </xs:restriction>
</xs:simpleType>

我最终在 Java 中得到以下枚举(删除了导入语句和 cmets)

@XmlEnum
public enum Test {

    @XmlEnumValue("4")
    FOUR("4"),
    @XmlEnumValue("6")
    SIX("6");
    private final String value;

    Test(String v) {
        value = v;
    }

    public String value() {
        return value;
    }

    public static Test fromValue(String v) {
        for (Test c: Test.values()) {
            if (c.value.equals(v)) {
                return c;
            }
        }
        throw new IllegalArgumentException(v.toString());
    }

}

这正是我想要的……除了public String value() 方法。根据 Sun 的命名约定,我希望该方法被称为 public String getValue()。这样我就可以轻松地在使用 EL 的 JSP 页面中使用它。现在我必须解决它。

在使用getValue() 方法而不是value() 方法将XJC 编译进一步调整为更有用的枚举方面,是否有人有任何经验?或者我可以添加一个方法之类的吗?

附:这发生在 JAXB v2.0.3 中。我下载了最新的v2.1.8版本,和那里一样……

【问题讨论】:

    标签: xsd enums jaxb type-safety xjc


    【解决方案1】:

    JAXB 规范中似乎没有任何内容允许这种更改。我认为这样做的唯一方法是编写一个 JAXB 插件。

    【讨论】:

    • 感谢您与 philvarner 一起思考...目前我已经解决了这个问题。我还在 JAXB 论坛 (forums.java.net/jive/message.jspa?messageID=310818) 上发布了它,但那里也没有答案……我们拭目以待。恕我直言,这是有缺陷的代码生成。如果 JAXB 插件有效,我会通知您。
    【解决方案2】:

    您可以创建生成类的一个小变体,该变体仅与生成的类不同,因为该方法的名称。然后在运行时,您必须确保加载您的变体而不是生成的变体,玩类加载器游戏。

    当然,这只能是原来的 XSD 不经常更改。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-25
      • 1970-01-01
      • 2016-12-13
      • 2015-09-02
      • 1970-01-01
      • 2021-10-12
      • 1970-01-01
      相关资源
      最近更新 更多