jakarta.validation.constraints.NotNull should be detected as expected

Description

NPE occurs with WildFly Preview branch https://github.com/scottmarlow/wildfly/tree/ORM7.0.0.Beta4_2

  1. Build WildFly Preview branch https://github.com/scottmarlow/wildfly/tree/ORM7.0.0.Beta4_2 locally with command ./build.sh clean install -DskipTests=true

  2. Start WildFly Preview via

    1. cdpreview/dist/target/wildfly-preview-36.0.0.Beta1-SNAPSHOT/bin

    2. vim standalone.conf and enable debug near bottom of file by uncommenting

      1. JAVA_OPTS="$JAVA_OPTS -agentlib:jdwp=transport=dt_socket,address=8787,server=y,suspend=n"

    3. ./standalone.sh

  3. Run unit test

    1. cd testsuite/integration/basic

    2. mvn -Dts.preview -Dpreview-server-tests install -Dtest=org.jboss.as.test.integration.jpa.beanvalidation.cdi.BeanValidationCdiIntegrationTestCase

 

^ should cause NPE failure checking one of the other assertions I think:


Caused by: jakarta.validation.ValidationException: HV000028: Unexpected exception during isValid call.
       at org.hibernate.validator@9.0.0.CR1//org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.validateSingleConstraint(ConstraintTree.java:185)
       at org.hibernate.validator@9.0.0.CR1//org.hibernate.validator.internal.engine.constraintvalidation.SimpleConstraintTree.validateConstraints(SimpleConstraintTree.java:64)
       at org.hibernate.validator@9.0.0.CR1//org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.validateConstraints(ConstraintTree.java:73)
       at org.hibernate.validator@9.0.0.CR1//org.hibernate.validator.internal.metadata.core.MetaConstraint.doValidateConstraint(MetaConstraint.java:131)
       at org.hibernate.validator@9.0.0.CR1//org.hibernate.validator.internal.metadata.core.MetaConstraint.validateConstraint(MetaConstraint.java:124)
       at org.hibernate.validator@9.0.0.CR1//org.hibernate.validator.internal.engine.ValidatorImpl.validateMetaConstraint(ValidatorImpl.java:589)
       at org.hibernate.validator@9.0.0.CR1//org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForSingleDefaultGroupElement(ValidatorImpl.java:543)
       at org.hibernate.validator@9.0.0.CR1//org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForDefaultGroup(ValidatorImpl.java:512)
       at org.hibernate.validator@9.0.0.CR1//org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForCurrentGroup(ValidatorImpl.java:448)
       at org.hibernate.validator@9.0.0.CR1//org.hibernate.validator.internal.engine.ValidatorImpl.validateInContext(ValidatorImpl.java:398)
       at org.hibernate.validator@9.0.0.CR1//org.hibernate.validator.internal.engine.ValidatorImpl.validate(ValidatorImpl.java:170)
       at org.hibernate@7.0.0.Beta5//org.hibernate.boot.beanvalidation.BeanValidationEventListener.validate(BeanValidationEventListener.java:141)
       at org.hibernate@7.0.0.Beta5//org.hibernate.boot.beanvalidation.BeanValidationEventListener.onPreInsert(BeanValidationEventListener.java:80)
       at org.hibernate@7.0.0.Beta5//org.hibernate.action.internal.EntityInsertAction.preInsert(EntityInsertAction.java:248)
       at org.hibernate@7.0.0.Beta5//org.hibernate.action.internal.EntityInsertAction.execute(EntityInsertAction.java:104)
       at org.hibernate@7.0.0.Beta5//org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:641)
       at org.hibernate@7.0.0.Beta5//org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:508)
       at org.hibernate@7.0.0.Beta5//org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:372)
       at org.hibernate@7.0.0.Beta5//org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:39)
       at org.hibernate@7.0.0.Beta5//org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:140)
       at org.hibernate@7.0.0.Beta5//org.hibernate.internal.SessionImpl.doFlush(SessionImpl.java:1490)
       at org.hibernate@7.0.0.Beta5//org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1479)
       at org.jboss.as.jpa@36.0.0.Beta1-SNAPSHOT//org.jboss.as.jpa.container.AbstractEntityManager.flush(AbstractEntityManager.java:445)
       at deployment.BeanValidationCdiIntegrationTestCase.jar//org.jboss.as.test.integration.jpa.beanvalidation.cdi.SFSB.createReservation(SFSB.java:25)
... various internal EJB/other calls left out
Caused by: java.lang.NullPointerException: Cannot invoke "org.jboss.as.test.integration.jpa.beanvalidation.cdi.MinimumValueProvider.getMin()" because "this.minimumValueProvider" is null
       at deployment.BeanValidationCdiIntegrationTestCase.jar//org.jboss.as.test.integration.jpa.beanvalidation.cdi.CustomMinValidator.isValid(CustomMinValidator.java:31)
       at deployment.BeanValidationCdiIntegrationTestCase.jar//org.jboss.as.test.integration.jpa.beanvalidation.cdi.CustomMinValidator.isValid(CustomMinValidator.java:16)
       at org.hibernate.validator@9.0.0.CR1//org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.validateSingleConstraint(ConstraintTree.java:179)
       ... 247 more


^ CustomMinValidator test source was not changed in my branch but it should be accessible via https://github.com/scottmarlow/wildfly/blob/1f68b0ad54b7899650a782a8efdde0cec196865c/testsuite/integration/basic/src/test/java/org/jboss/as/test/integration/jpa/beanvalidation/cdi/CustomMinValidator.java#L19-L18

Should the NotNull check on the property https://github.com/scottmarlow/wildfly/blob/1f68b0ad54b7899650a782a8efdde0cec196865c/testsuite/integration/basic/src/test/java/org/jboss/as/test/integration/jpa/beanvalidation/cdi/Reservation.java#L27 be detected earlier?

 



Environment

None

Activity

Show:

Scott Marlow 5 days ago

Thanks for the fix on https://github.com/wildfly/wildfly/pull/18799 ! I think that this issue can be closed now.

Marko Bekhta last week

Hey

There’s no guarantee of the order in which the validation happens. In the log you’ve attached, it seems that the ConstraintValidatorFactory didn’t inject the property (MinimumValueProvider minimumValueProvider)… we did some updates to the CDI-aware ConstraintValidatorFactory is WildFly using the one from HV, or some custom one?

Details

Assignee

Reporter

Bug Testcase Reminder (view)

Bug reports should generally be accompanied by a test case!

Bug Testcase Reminder (edit)

Bug reports should generally be accompanied by a test case!

Participants

Marko Bekhta
Scott Marlow

Affects versions

Priority

Created last week
Updated 5 days ago