gpt4 book ai didi

java - 如何使用 JAXB 处理无效的枚举类型?

转载 作者:行者123 更新时间:2023-11-30 05:15:39 25 4
gpt4 key购买 nike

我们正在使用 JAXB 来处理我们的 wsdl 验证。在 wsdl 中,我们有一个像这样的枚举:

<xs:simpleType name="myEnum">
<xs:annotation>
<xs:documentation>The enums which matter.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:enumeration value="MYENUM_1">
<xs:annotation>
<xs:documentation>MYENUM_1 is the first enum.</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="MYENUM_2">
<xs:annotation>
<xs:documentation>MYENUM_2 is the second enum.</xs:documentation>
</xs:annotation>
</xs:enumeration>
</xs:restriction>
</xs:simpleType>

如果我们传入一个无效的字符串作为枚举,例如 MYENUM_7,该值将设置为 null,而不是像我们期望的那样抛出错误。深入研究代码,我们从 RuntimeEnumLeafInfoImpl.java 中发现以下内容:

package com.sun.xml.bind.v2.model.impl;
//...
public T parse(CharSequence lexical) throws AccessorException, SAXException {
// TODO: error handling

B b = baseXducer.parse(lexical);
if(b==null) {

return null;
}

return parseMap.get(b);
}

很明显,parseMap 是我们的枚举列表,但如果映射的键(在本例中为 b 的值)不在映射中,它只会返回 null。如果 b 不在 parseMap 中,我们希望它抛出某种异常。

除了修复这个问题并重新编译我们自己的 JAXB 之外,还有其他方法可以解决这个问题吗?

<小时/>

编辑:澄清

我们正在使用 JAXB 2.1.9,并且我们想要解码数据并验证它。我当然有可能忽略了文档中有关验证的一些内容。

最佳答案

您说您正在使用 JAXB 来验证数据,但您只是描述了解码 XML 文档后的意外结果。在 JAXB 中,验证和解码是两个不同且可能独立的问题,因为您可以在至少三种不同的模式下使用 JAXB:

  • 不验证
  • 验证,报告错误,但继续解码
  • 验证错误并中断

您确定已在解码器上启用架构验证并且正在评估潜在错误吗?如何做到这一点相当不同,具体取决于您使用的是 JAXB 1.0 还是 2.0,但文档应该告诉您如何操作。

关于java - 如何使用 JAXB 处理无效的枚举类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1510501/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com