在Jaxb1.0中,通过对解组对象调用'setValidating‘打开xml验证:
JAXBContext jaxbContext = JAXBContext.newInstance(packageName);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
unmarshaller.setValidating(true);在Jaxb2.0中,验证是增强的,需要设置模式:
Schema schema = schemaFactory.newSchema(file);
unmarshaller.setSchema(schema);看起来,要使用JAXB2.0验证,模式xsd文件是必需的、必需的资源,必须在应用程序上下文中提供。
在JAXB1.0中,打开验证不需要模式文件(至少是显式的)
问题1:
JAXB1.0真的在其实现(来自xjc)中存储验证功能吗?在app/package/classpath运行时上下文中不需要xsd文件吗?
问题2:
在JAXB2.0中,是否有可能对解组器使用“unsetSchema”--只是放弃验证(为了性能目的.当我看到传入的xml有效载荷与我之前已经验证过的相同)?
发布于 2022-12-01 16:52:28
对问题2的答复:
要关闭解封送处理程序验证,只需将模式重置为null就足够了:
unmarshaller.setSchema(null);问题1仍未解决:
JAXB2.0是否需要在运行时提供一个模式文件来执行编组/解编组过程中的验证?或者,我们可以使用一些选项(如-nv)强制xjc编译器生成具有JAXB1.0那样的验证功能的实现。(只是为了不透露xsd模式)
https://stackoverflow.com/questions/74642162
复制相似问题