2011-05-16 102 views
0

我有以下要求: 我有一个验证系统。我需要做的事情之一是对XML文件进行验证,即验证该标签X是否等于给定值。我有多种可能的情况,每种情况下都有一组需要验证的不同标签。java验证设计问题

我不想在不同场景下测试相同标签时重复相同的代码。

我想弄清楚会解决这个问题的设计。

任何想法?

谢谢。

回答

0

我会为这些场景定义XPath表达式对和预期结果。

验证器然后将采取一个场景(对象),编译并将关联的表达式应用到xml文档。这将选择一个元素,验证器会检查元素的内容是否与期望值匹配。

+0

感谢您的回答。预期的结果在运行时确定。所以我不能预定义表达式和结果。 – dan 2011-05-16 21:08:50

+0

@dan - 无所谓 - 然后只存储XPath并在运行时告诉验证程序*其中*用于获取预期结果或规则 – 2011-05-16 21:52:40

0

呃,委托给共享方法?像:

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 
    } 
} 
0

一种方法是将XML解析成一个对象,然后按照豆验证它验证规范(JSR 303)。 Hibernate Validator是参考实现。*您可以使用验证约束对您的属性进行注释,然后指定validation groups,以便在某些情况下验证某些字段。

还有更多的信息herehere

* Hibernate Validator与Hibernate ORM不同。它们只与Hibernate ORM使用Validator进行约束检查有关。