2011-11-18 107 views
8

我们正在寻找一个Java库/系统/软件包,它不仅可以进行基本验证,还可以进行关系验证。我们需要能够表达基于多个相关实体的验证标准。Java模型验证

大多数验证模型Spring Validation,JSR303专门用于验证bean的属性。但是我们需要一些可以跨越豆类的东西。

我们的需求是想出一个验证模型状态的方法,同时将验证逻辑外化为java代码。

在上面的定义中,Bean只是一个POJO,而一个模型是一个相关Bean的集合。因此,例如,如果帐户具有地址集合并且Account.countryOfResidence设置为美国,我希望有一个验证规则来确保所有地址在其中都有一个美国国家。

因此,在向帐户添加地址的“操作”期间,验证会启动,以确保Address.country与Account.countryOfResidence相同。

我们正在调查DRULES,但想看看是否有其他选项可用。

关于如何进行的任何建议?

+0

在你的上下文中,什么是模型,什么是“模型状态”,什么是验证?如果他们知道你在寻找什么,它可能会帮助人们做出答案。 – CPerkins

+1

为什么你想避免Java验证? Java看起来是最具表现力的语言,拥有大量可用的API,并且可以轻松访问Java对象。 –

+0

你能提供一个样本吗? – Puce

回答

1

不知道如何积极的这个项目,但我前一阵子使用它,它提供的功能做你描述 - 看看,看看它是否可能会有所帮助:

http://i-screen.org/docs/index.html

当然还有Jess: http://www.jessrules.com/jess/

这也值得一看,虽然我对此不太了解。 弗拉德:http://www.sapia-oss.org/projects/vlad/

+0

Jess的另一个选择是JBoss Project,以前称为Drools。我不喜欢这些内容是1)XML; 2)在单独文件中定义的验证规则; 3)验证在一个单独的XML文件中定义。 –

0

我认为这是可能的JSR 303做的ScriptAssert validatorcustom validator

This question有几个自定义的跨领域验证器可以用作创建自己的基础。

这里是一个@ScriptAssert验证器的例子。

@ScriptAssert(lang="javascript", script="_this.countryOfResidence.equals(_this.address.country)") 
// @ScriptAssert(lang="jexl", script="_this.countryOfResidence == _this.address.country") 
public class Account { 
    @NotNull @Valid 
    private Address adddress; 

    private String countryOfResidence; 
} 

public class Address { 
    ... 
    @NotNull 
    private String country; 
} 

这当然比自定义验证程序少得多的代码。


注意:验证器也可以用XML创建(如果这是您的方式)。

0

我很失望这个空间有什么 - 可能是因为我想要一个不可能的功能组合 - 吃蛋糕和吃东西。所以这更多的是通过比什么更长的评论,至少考虑答案。我把这个问题标记为“最喜欢的”,希望别人能指点我们一个主要的子弹。但我猜这房子里没有巫师。

其中一种可能性是OCL,特别是随相关Eclipse插件提供的支持。我看过它并拒绝了它,因为它看起来不值得 - 但你的里程可能会有所不同。

另一种可能性(也许是!!!)是利用为BDD编写的工具之一。但是,这些是为了测试而编写的,而不是生产代码 - “给定方案x,我希望发生”。我指的是,如 easyb,jbehave和cucumber的cuke4duke端口 - 尤其是easyb。我认为jbehave对你来说太重了,而且我还没认真看待黄瓜。

如果您发现了一些适合您的东西,请回来并写下您自己的答案。请注意,您有7个upvotes和4个最爱 - enquiring minds want to know