gpt4 book ai didi

java - JAXB 自定义 validator

转载 作者:行者123 更新时间:2023-11-29 08:55:16 27 4
gpt4 key购买 nike

我有这样的方法:

private static <T> T readXML(final String file, final String schemaFile, final Class<T> clazz) {
try {
final JAXBContext context = JAXBContext.newInstance(clazz);
final Unmarshaller unmarshaller = context.createUnmarshaller();
unmarshaller.setEventHandler(new EventHandler());
final SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
final String directory = System.getProperty("schema.dir");
unmarshaller.setSchema(schemaFactory.newSchema(new File(directory, schemaFile)));
return clazz.cast(unmarshaller.unmarshal(new File(directory, file)));
} catch (final Exception ex) {
ex.printStackTrace();
}
System.exit(1);
return null;
}

我这样使用它:

private static final Primitives primitives = readXML("primitives.xml", "primitives.xsd", Primitives.class);

我的问题是是否可以将自定义 validator 添加到解码器中?我的意思是假设我有一个名为 Foo 的复杂类型。我想对其进行一些我无法在 xsd 文件中描述的验证,所以我想做这样的事情:

unmarshaller.setCustomValidator(Foo.class, new MyCustomValidator());

因此每次 JAXB 读取 Foo 时都会调用 MyCustomValidator。或者,如果我无法在 xsd 文件中描述某些验证,那么我必须在 JAXB 读取完成后验证已解析的类吗?

哦,顺便说一句...我使用 xjc 从 xsd 生成了 JAXB 类。

最佳答案

我想如果验证规则不能在 xsd 中描述,那么它就超出了 JAXB 的范围。但是,如果您在可以基于类获得自定义 validator 对象时设计一个结构,则可以在方法末尾添加该逻辑以保持其封装质量。

关于java - JAXB 自定义 validator ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20588937/

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