2015-02-12 5 views
1

Я запускаю junit, написанный в пользовательской JSR 303 Проверка с использованием ConstraintValidator. Что-то вроде этого examplejavax.validation.ValidationException: HV000063: Не удалось создать экземпляр класса

Моего Validation тестового класса:

public class ProductV2ValidationTest { 
    private static Validator validator; 
    @Before 
    public void setUp() throws ExternalApiException { 
     ValidatorFactory validatorFactory = Validation.buildDefaultValidatorFactory(); 
     validator = validatorFactory.getValidator(); 
    } 

    @Test 
    public void ValidatorTest() { 
     try { 
      ProductV2 productV2 = getObjectMapper().readValue(this.getClass().getResourceAsStream("/json/productV2Valid.json"), ProductV2.class); 

      Set<ConstraintViolation<ProductV2>> constraintViolations = validator.validate(productV2); 
      for(ConstraintViolation<ProductV2> constraintViolation : constraintViolations){ 
      String message = constraintViolation.getMessage(); 
      System.out.println(message); 
     } 

     assertEquals(0,constraintViolations.size()); 

    } catch (IOException e) { 
     e.printStackTrace(); 
     assertTrue(false); 
    } 
} 

}

FYI, Мои валидаторов в какой-то другой специалист проект (банке), и тест написано в другом Maven проекте (война) ,

Я получаю эту ошибку:

javax.validation.ValidationException: HV000063: Unable to instantiate class com.xyz.gep.itemwrapper.external.entities.validator.NumberOfObjectsValidater. 
at org.hibernate.validator.internal.util.privilegedactions.NewInstance.run(NewInstance.java:54) 
at org.hibernate.validator.internal.util.ReflectionHelper.run(ReflectionHelper.java:658) 
at org.hibernate.validator.internal.util.ReflectionHelper.newInstance(ReflectionHelper.java:206) 
at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintValidatorFactoryImpl.getInstance(ConstraintValidatorFactoryImpl.java:34) 
at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintValidatorManager.createAndInitializeValidator(ConstraintValidatorManager.java:141) 
at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintValidatorManager.getInitializedValidator(ConstraintValidatorManager.java:101) 
at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.validateConstraints(ConstraintTree.java:125) 
at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.validateConstraints(ConstraintTree.java:91) 
at org.hibernate.validator.internal.metadata.core.MetaConstraint.validateConstraint(MetaConstraint.java:85) 
at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraint(ValidatorImpl.java:478) 
at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForDefaultGroup(ValidatorImpl.java:424) 
at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForCurrentGroup(ValidatorImpl.java:388) 
at org.hibernate.validator.internal.engine.ValidatorImpl.validateInContext(ValidatorImpl.java:340) 
at org.hibernate.validator.internal.engine.ValidatorImpl.validate(ValidatorImpl.java:158) 
at com.rakuten.gep.itemwrapper.external.entities.validator.ProductV2ValidationTest.ValidatorTest(ProductV2ValidationTest.java:36) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:606) 
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 
Caused by: java.lang.IllegalAccessException: Class org.hibernate.validator.internal.util.privilegedactions.NewInstance can not access a member of class com.rakuten.gep.itemwrapper.external.entities.validator.NumberOfObjectsValidater with modifiers "" 
at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:109) 
at java.lang.Class.newInstance(Class.java:368) 
at org.hibernate.validator.internal.util.privilegedactions.NewInstance.run(NewInstance.java:48) 
at org.hibernate.validator.internal.util.ReflectionHelper.run(ReflectionHelper.java:658) 
at org.hibernate.validator.internal.util.ReflectionHelper.newInstance(ReflectionHelper.java:206) 
at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintValidatorFactoryImpl.getInstance(ConstraintValidatorFactoryImpl.java:34) 
at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintValidatorManager.createAndInitializeValidator(ConstraintValidatorManager.java:141) 
at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintValidatorManager.getInitializedValidator(ConstraintValidatorManager.java:101) 
at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.validateConstraints(ConstraintTree.java:125) 
at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.validateConstraints(ConstraintTree.java:91) 
at org.hibernate.validator.internal.metadata.core.MetaConstraint.validateConstraint(MetaConstraint.java:85) 
at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraint(ValidatorImpl.java:478) 
at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForDefaultGroup(ValidatorImpl.java:424) 
at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForCurrentGroup(ValidatorImpl.java:388) 
at org.hibernate.validator.internal.engine.ValidatorImpl.validateInContext(ValidatorImpl.java:340) 
at org.hibernate.validator.internal.engine.ValidatorImpl.validate(ValidatorImpl.java:158) 
at com.rakuten.gep.itemwrapper.external.entities.validator.ProductV2ValidationTest.ValidatorTest(ProductV2ValidationTest.java:36) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:606) 
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47) 
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44) 
at mockit.integration.junit4.internal.BlockJUnit4ClassRunnerDecorator.executeTest(BlockJUnit4ClassRunnerDecorator.java:126) 
at mockit.integration.junit4.internal.BlockJUnit4ClassRunnerDecorator.invokeExplosively(BlockJUnit4ClassRunnerDecorator.java:104) 
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java) 
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) 
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271) 
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70) 
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) 
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238) 
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) 
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236) 
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53) 
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229) 
at org.junit.runners.ParentRunner.run(ParentRunner.java:309) 
... 6 more 

Я попытался добавить

<dependency> 
    <groupId>javax.el</groupId> 
    <artifactId>javax.el-api</artifactId> 
    <version>2.2.4</version> 
</dependency> 
<dependency> 
    <groupId>org.glassfish.web</groupId> 
    <artifactId>javax.el</artifactId> 
    <version>2.2.4</version> 
</dependency> 

Но никакой помощи.

Я использую это: Зависимость от

<dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-validator</artifactId> 
     <version>5.0.2.Final</version> 
     <exclusions> 
      <exclusion> 
       <groupId>org.slf4j</groupId> 
       <artifactId>slf4j-api</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 

ответ

1

Проблема в том, что спящий режим валидатор не может создать новый экземпляр com.rakuten.gep.itemwrapper.external.entities.validator.NumberOfObjectsValidater, потому что он не имеет стандартный конструктор по умолчанию.

Вы должны быть в состоянии воспроизвести проблему можно, выполнив следующий код:

public static void test() throws InstantiationException, IllegalAccessException { 
    try { 
     com.rakuten.gep.itemwrapper.external.entities.validator.NumberOfObjectsValidater.class.newInstance(); 
    } 
    catch (InstantiationException e) { 
     throw e; 
    }  
    catch (IllegalAccessException e) { 
     throw e; 
    } 
    catch (RuntimeException e) { 
     throw e; 
    } 
} 

Решение будет добавить общественный модификатор конструктору NumberOfObjectsValidater

+0

Ваш тестовый код действительно дать мне такая же ошибка. Я добавил конструктор для тестирования и забыл добавить конструктор по умолчанию. спасибо –

Смежные вопросы