【发布时间】:2011-05-16 20:22:15
【问题描述】:
我有以下要求: 我有一个验证系统。我需要做的一件事是对 XML 文件执行验证,这意味着验证标记 X 是否等于给定值。我有不止一个可能的场景,并且在每个场景中都有一组不同的标签需要验证。
我不想在不同场景下测试相同的标签时重复相同的代码。
我正在尝试找出可以解决此问题的设计。
有什么想法吗?
谢谢。
【问题讨论】:
标签: java xml validation
我有以下要求: 我有一个验证系统。我需要做的一件事是对 XML 文件执行验证,这意味着验证标记 X 是否等于给定值。我有不止一个可能的场景,并且在每个场景中都有一组不同的标签需要验证。
我不想在不同场景下测试相同的标签时重复相同的代码。
我正在尝试找出可以解决此问题的设计。
有什么想法吗?
谢谢。
【问题讨论】:
标签: java xml validation
我会为场景定义成对的 XPath 表达式和预期结果。
然后,验证器将采用一个场景(对象),编译相关的表达式并将其应用于 xml 文档。这将选择一个元素,验证器将检查元素的内容是否与预期值匹配。
【讨论】:
呃,委托给共享方法?喜欢:
void validateAppleScenario(Xml xml) {
validateFruit(xml);
// validate apples specific tags
}
void validateBanana(Xml xml) {
validateFruit(xml);
// validate banana specific tags
}
void validateFruit(Xml xml) {
// validate tags common to all fruit
}
或者,如果您希望验证器是单独的对象,您可以使用子类型:
interface Validator {
void validate(Xml xml);
}
class FruitValidator implements Validator {
void validate(Xml xml) {
// validate tags common to all fruit
}
}
class AppleValidator extends FruitValidator {
void validate(Xml xml) {
super.validate(xml);
// validate tags specific to apples
}
}
【讨论】:
一种方法是将 XML 解析为一个对象,然后根据 Bean Validation 规范 (JSR 303) 对其进行验证。 Hibernate Validator 是参考实现。* 您可以使用验证约束注释您的属性,然后指定 validation groups 以便某些字段在某些情况下得到验证。
*Hibernate Validator 与 Hibernate ORM 不同。它们的相关之处仅在于 Hibernate ORM 使用 Validator 进行约束检查。
【讨论】: