I'm having an issue using bean validation with Android. I've included the validation api and hibernate validator 4.0.1 to the libs and assets folder. The code for validating the input is the following
/* This doesn't work either
*
* ValidatorFactory factory = Validation
* .byProvider(HibernateValidator.class).configure()
* .buildValidatorFactory();
*/
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
Set<ConstraintViolation<Class<Department>>> violations = validator
.validate(Department.class);
for (ConstraintViolation<Class<Department>> v : violations) {
// do something useful
}
I get a ValidationException, which states that no default provider is found. The commented part doesn't work either. It also throws a ValidationException stating it is unable to find the provider org.hibernate.validator.HibernateValidator.
02-04 07:44:22.388: E/AndroidRuntime(946): Caused by: javax.validation.ValidationException: Unable to find provider: class org.hibernate.validator.HibernateValidator
02-04 07:44:22.388: E/AndroidRuntime(946): at javax.validation.Validation$ProviderSpecificBootstrapImpl.configure(Validation.java:223)
02-04 07:44:22.388: E/AndroidRuntime(946): at com.example.testapp.MainActivity.validate(MainActivity.java:51)
02-04 07:44:22.388: E/AndroidRuntime(946): at com.example.testapp.MainActivity.anlegen(MainActivity.java:46)
02-04 07:44:22.388: E/AndroidRuntime(946): ... 14 more
Did I miss something while configuring? Or is hibernate not applicable for android?
UPDATE
I tried to implement ValidatorProviderResolver as @Gunnar suggested. The code changed to:
HibernateValidatorConfiguration config = Validation
.byProvider(HibernateValidator.class)
.providerResolver(new MyAndroidValidationProviderResolver())
.configure();
ValidatorFactory factory = config.buildValidatorFactory();
Validator v = factory.getValidator();
Now I get Exceptions like:
02-05 20:21:36.642: E/AndroidRuntime(792): Caused by: java.lang.IllegalArgumentException: Invalid logger interface org.hibernate.validator.internal.util.logging.Log (implementation not found)
02-05 20:21:36.642: E/AndroidRuntime(792): at org.jboss.logging.Logger.getMessageLogger(Logger.java:2250)
02-05 20:21:36.642: E/AndroidRuntime(792): at org.jboss.logging.Logger.getMessageLogger(Logger.java:2214)
02-05 20:21:36.642: E/AndroidRuntime(792): at org.hibernate.validator.internal.util.logging.LoggerFactory.make(LoggerFactory.java:29)
02-05 20:21:36.642: E/AndroidRuntime(792): at org.hibernate.validator.internal.util.Version.<clinit>(Version.java:27)
02-05 20:21:36.642: E/AndroidRuntime(792): ... 21 more
I also switched to Hibernate 5.0.3 final including ALL libraries (required as well as optional).