我会在我的OSGi中用HibernateValidator验证我的anootated pojos(JSR 303)。 单元测试工作正常,但在OSGi上它没有工作。
这是我的验证方法:
public static void validate(Object o) throws ValidationException {
ValidatorFactory factory = Validation.byDefaultProvider().providerResolver(new OSGiServiceDiscoverer()).configure()
.buildValidatorFactory();
Validator validator = factory.getValidator();
Set<ConstraintViolation<Object>> validatorResult = null;
if (o instanceof MessageContentsList) {
MessageContentsList messageList = (MessageContentsList) o;
validatorResult = validator.validate(messageList.get(0));
} else {
validatorResult = validator.validate(o);
}
if (!validatorResult.isEmpty()) {
StringBuffer sb = new StringBuffer();
for (ConstraintViolation<Object> v : validatorResult) {
sb.append(v.getPropertyPath() + " " + v.getMessage() + ", ");
}
String msg = sb.toString().substring(0, sb.toString().length() - 1);
throw new ValidationException(msg);
}
}
这里是发现者:
public class OSGiServiceDiscoverer implements ValidationProviderResolver {
@Override
public List<ValidationProvider<?>> getValidationProviders() {
List<ValidationProvider<?>> providers = new ArrayList<ValidationProvider<?>>(1);
providers.add(new HibernateValidator());
return providers;
}
}
在pom中,我为OSGi添加了以下导入:
javax.validation,
javax.validation.bootstrap,
javax.validation.constraints,
javax.validation.spi,
org.hibernate.validator,
有人知道我做错了吗?
THX
答案 0 :(得分:1)
我终于找到了解决方案。 原因是,带注释的类在单独的包中而不是验证,并且我没有添加javax.validation依赖项。因此,注释被忽略,验证没有功能