2013-10-23 38 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