0

假设我正在尝试使用整数字段 (xs:integer) 解组 XML 文件:13131546456131653154156415616

该值大于 Java Long 的最大值。

当 Jaxb 试图解组它时,我希望得到并捕获一个异常。

反而没有例外,我pojo的object.Value设置为null。

有没有办法检测这种情况何时发生并记录下来?

我试过使用 vec,但什么也没找到(空列表):

    ValidationEventCollector vec = new ValidationEventCollector();

    JAXBContext jaxbContext = JAXBContext.newInstance(MyPojo.class);
    Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
    jaxbUnmarshaller.setEventHandler(vec);
    System.out.println(vec.getEvents().length);
   MyPojo model = (MyPojo) jaxbUnmarshaller.unmarshal(new FileInputStream(file));
4

1 回答 1

2

xs:integer不受限制,它可以是任意长度的值。
可比较的 Java 类型是BigInteger.

xs:int然而,仅限于:

maxInclusive = 2147483647
minInclusive = -2147483648

并且xs:long受限于:

maxInclusive = 9223372036854775807
minInclusive = -9223372036854775808

因此,如果您希望 XML 模式验证器检查值范围,请使用适当的类型。

于 2018-05-22T23:27:07.257 回答