2011-11-18 24 views
8

Estamos buscando una biblioteca/sistema/paquete Java que no solo haga la validación básica sino que también pueda validar la relación. Necesitamos poder expresar criterios de validación basados ​​en múltiples entidades relacionadas.Validación del modelo Java

La mayoría de los modelos de validación Spring Validation, JSR303 están específicamente destinados a la validación de los atributos de bean. Pero necesitamos algo que atraviese los frijoles.

Nuestros requisitos son crear un método para validar un estado de modelo y externalizar la lógica de validación fuera del código java.

En la definición anterior, un Bean es solo un POJO, y un modelo es una colección de Beans relacionados. Entonces, por ejemplo, si Account tiene una colección de Direcciones y Account.untryOfResidence está establecida en EE. UU., Me gustaría tener una regla de validación que garantice que todas las Direcciones tengan un país de EE. UU. En ellas.

Por lo tanto, durante la "operación" de agregar una dirección a la cuenta, se iniciará una validación asegurando que Address.country sea lo mismo que Account.countryOfResidence.

Estábamos buscando en DRULES, pero quería ver si había otras opciones disponibles.

¿Alguna sugerencia sobre cómo proceder?

+0

En su contexto, ¿qué es un modelo, qué es un "estado modelo" y qué es la validación? Podría ayudar a las personas a generar respuestas si supieran lo que buscas. – CPerkins

+1

¿Por qué quieres evitar Java para la validación? Java parece ser el lenguaje más expresivo para hacer eso, tiene muchas API disponibles y accede fácilmente a objetos Java. –

+0

¿Podría proporcionar una muestra? – Puce

Respuesta

1

No está seguro de qué tan activo es este proyecto, pero lo usé hace un tiempo y nos proporcionó capacidades para hacer lo que usted describe - echar un vistazo y ver si podría ser útil:

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

Y, por supuesto, está Jess: http://www.jessrules.com/jess/

También podría valer la pena echarle un vistazo a esto, aunque no sé mucho al respecto. Vlad: http://www.sapia-oss.org/projects/vlad/

+0

Una alternativa a Jess es el Proyecto JBoss, conocido anteriormente como Drools. Lo que no me gusta de estos es 1) XML; 2) reglas de validación definidas en un archivo separado; 3) validación definida en un archivo XML separado. –

0

creo que esto es posible hacerlo en JSR 303 con el ScriptAssert validator o una custom validator.

This question tiene varios validadores de campo cruzado personalizados que podrían utilizarse como base para crear el suyo propio.

Y aquí hay un ejemplo del validador @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; 
} 

Esto es ciertamente mucho menos código que un validador personalizado.


Nota: los validadores también se pueden crear en XML (si esa es la forma de rodar).

0

Estoy decepcionado por lo que hay disponible en este espacio, probablemente porque quiero una combinación imposible de características, comiendo torta y comiendo. Así que esto es más por un comentario largo que I, al menos considere una respuesta . Marqué esta pregunta como un "favorito", con la esperanza de que alguien más nos apunte a una bala majick. Pero supongo que no hay magos en la casa.

Una posibilidad es OCL, especialmente con el soporte provisto con los complementos Eclipse relevantes.Lo he visto y lo he rechazado porque no parecía valer la pena el esfuerzo, pero su millaje puede variar.

Otra posibilidad (tal vez !!!) es aprovechar piezas de una de las herramientas que se han escrito para BDD. Sin embargo, estos están escritos para pruebas, no código de producción: "dado el escenario x, espero que suceda". Me refiero a las cosas como easyb, jbehave, y el puerto cuke4duke de cucumber - especialmente easyb. Creo que jbehave es demasiado pesado para Java, y todavía no he mirado seriamente pepino.

Si encuentra algo que funciona bien para usted, vuelva y escriba su propia respuesta. Tenga en cuenta que tiene 7 votos ascendentes y 4 favoritos en este - enquiring minds want to know!

Cuestiones relacionadas