Hallo,
ich hab ein Problem, welches mich jetzt schon seit einiger Zeit beschäftigt. Leider konnte ich bisher keine Lösung dafür finden (weder in der Forumssuche noch bei Google).
Es geht um Folgendes: Ich habe eine Abstrakte Klasse "User" und eine Klasse "Accountant", welche eine Subklasse von User ist. In User habe ich Properties mit Constraints (JSR-303-Annotations) versehen. Wenn ich nun mit dem Hibernate-Validator ein Objekt von Typ Accountant validieren will, scheint es, als würde der Validator die Constraints der Superklasse komplett ignorieren und liefert mir keine Fehler.
User.java (ausschnitt):
Code:
public abstract class User {
protected long uid;
@NotNull
@Size(min = 2, max = 50)
protected String lastname;
@NotNull
@Size(min = 2, max = 50)
protected String firstname;
@NotNull
@Email
protected String email;
//rest ommited (incl. getter & setter)
}
Davon abgeleitet die klasse Accountant:
Code:
public class Accountant extends User {
private boolean allowedToCreateContext;
public boolean isAllowedToCreateContext() {
return allowedToCreateContext;
}
public void setAllowedToCreateContext(boolean allowedToCreateContext) {
this.allowedToCreateContext = allowedToCreateContext;
}
}
So wird validiert:
Code:
protected void validate(Object v) {
String className = v.getClass().getSimpleName();
Set<? extends ConstraintViolation<?>> violations = beanValidator.validate(v);
if (violations.size() != 0) {
StringBuilder sb = new StringBuilder();
sb.append("[");
for (ConstraintViolation<?> cv : violations) {
sb.append(cv.getPropertyPath() + " ");
}
sb.append("]");
log.warn("Validation of " + className + "failed (" + violations.size() + " constraint violations ->" + sb.toString() + ")");
throw new ValidationFailedException(violations);
}
log.debug("Successfully validated an instance of " + className);
}
beanValidator wird von Spring injiziert, und ist wie folgt definiert:
Code:
<bean id="beanValidator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" />
Dieser Code funktioniert so wie er soll, wenn man Beans validiert, die keine subklassen sind.
Der hibernate-validator hat die Version
4.0.2.GA.
Ich weiß langsam echt nicht mehr weiter, und würde mich freuen, wenn mir jemand helfen könnte!
LG,
deepthought-64