我将使用OSGi中的HibernateValidator验证经过修饰的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,
有人知道我在做什么错吗?
谢谢
最佳答案
我终于找到了解决方案。
原因是,带注释的类与验证位于不同的包中,并且我还没有添加javax.validation依赖项。因此注释被忽略,验证没有功能
关于java - 在OSGi中验证Pojo,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26716110/