假设我正在尝试解组具有整数字段(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));
最佳答案
xs:integer
不受限制,可以是任何长度的值。
可比较的Java类型是BigInteger
。
但是,xs:int
限于:
maxInclusive = 2147483647
minInclusive = -2147483648
并且
xs:long
限于:maxInclusive = 9223372036854775807
minInclusive = -9223372036854775808
因此,如果您希望XML Schema Validator检查值范围,请使用适当的类型。