2013-10-23 40 views
2

真的可能没有适用于Android的JSR-303兼容验证程序吗?适用于Android的JSR-303兼容bean验证程序

Hibernate验证器似乎与Android(ClassNotFound Exception)不兼容,然后...我找不到任何其他东西。

我发现Metawidget - 但在他们的网站上,他们说“Metawidget附带了一个原生于您现有前端的UI组件” - 我不需要额外的UI组件。

以下是我对后端:

final String wrongJson = "{\"name\":\"notavalidemail\"}"; 
    final Gson gson = new Gson(); 
    final Project projectFromJson = gson.fromJson(wrongJson, Project.class); 

    final ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); 
    final Validator validator = factory.getValidator(); 

    final Set<ConstraintViolation<Project>> constraintViolations = validator.validate(projectFromJson); 
    assertNotNull(constraintViolations); 

    for (final ConstraintViolation<Project> violation : constraintViolations) { 
     logger.debug("Errormessage: {}",violation.getMessage()); 
    } 

为了避免一堆IFS的我想在Android上是相同的 - 任何提示?

[更新] 对不起 - 这不是ClassNotFound的是

javax.validation.ValidationException:无法创建一个配置,因为没有Bean验证提供者可能被发现。将像Hibernate Validator(RI)这样的提供程序添加到您的类路径中。 在javax.validation.Validation $ GenericBootstrapImpl.configure(Validation.java:271) 在javax.validation.Validation.buildDefaultValidatorFactory(Validation.java:110) 在at.mikemitterer.mobiad.android.util.ProjectTest.testWithWrongJsonString( ProjectTest.java:90) at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:190) at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java :175) 在android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:555) 在android.app.Instrumentation $ InstrumentationThread.run(Instrumentation.java:1661)

更新II] 是 - 休眠 - 验证 - 5.1.0.Alpha1.jar是在我的lib文件夹

回答

0

Whiche CNF你究竟得到什么?如果它大约为java.beans.Introspector,则这是固定的HV 5.1.0.Alpha1其中doesn't import此类型,因此应在Android上运行。如果是关于其他API,知道哪些是非常有趣的。

+0

我刚刚更新了我的问题... –

+0

我不是但是根据[this](http://stackoverflow.com/questions/5760607/using-serviceloader-on-android),这个环境中的ServiceLoader存在问题(BV用来加载提供者) 。你可以尝试明确指定你的提供者,如下所示:'Validation.byProvider(HibernateValidator.class).configure()。buidValidatorFactory()'; – Gunnar

+0

我在几分钟之前试过这个 - 同样的结果。我也用ApacheValidationProvider尝试过,它也一样。我认为这是一个更普遍的问题。如果它应该在运行时加载这些Validator类,Android似乎会失败。 –

0

在我寻求JSR 343和Angular.js的一些集成之后,我发现这个问题,它应该比你的情况更加棘手,以及你用Java开发的Android。

如果你看看valdr你会看到在angular.js与模型为中心的方法一个框架来验证,你会看到有一个插件来支持JSR 303 插件是由几个部分组成,你可能要考虑在Android中“模仿”客户端 - 服务器应用程序,并拥有一个定义验证规则的“中心位置”。 为此,您可能会需要以下条件:

  1. 在服务器端定义的类来扫描JSR 303个注解
  2. 哪些类,你的Android应用被映射到这些Java bean的
  3. 一个办法获取扫描结果并动态构建一组规则
  4. 当被映射的对象上的setter被激活时,使用每个规则。

如果这是没有服务器的Android应用程序,那么我想你应该尝试端口JSR 303的来源是使用与Android