无效的枚举值JAXB - 转换为null而不是抛出异常

时间:2017-02-07 15:01:58

标签: java xml xsd jaxb xjc

使用jaxb / xkc生成一组与我的xsd相关的类。

具体来说,我对以下定义的枚举(来自xsd)

有疑问
<xs:simpleType name="TEST">
    <xs:annotation>
        <xs:documentation>
            BLAH
        </xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
        <xs:enumeration value="FOO"/>
        <xs:enumeration value="BAR"/>
    </xs:restriction>
</xs:simpleType>    

现在,如果我将C in作为值传递,您可能会因为以下生成的代码而失败;

@XmlType(name = "TEST")
@XmlEnum
public enum TEST{

    @XmlEnumValue("FOO")
    FOO("FOO"),
    @XmlEnumValue("BAR")
    BAR("BAR");
    private final String value;

    TEST(String v) {
        value = v;
    }

    public String value() {
        return value;
    }

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

}

现在我认为应该抛出异常,但事实并非如此。可能是因为fromValue方法似乎没有被调用到任何地方?为什么在这种情况下它只是将值设置为null然后如何让它抛出异常?

由于

1 个答案:

答案 0 :(得分:0)

您是否可以尝试使用验证程序来验证输入xml是否符合架构。 可能会在该流中调用fromValue方法。你会收到例外。

架构验证示例为link1 link2。 Unmarshaller文档链接为here