Test and fix native-image functionality with hibernate-validator

Summary

native-image have some flaws using hibernate-validator, the idea is to detect and try to fix the issues with bean validation and if the issue is from upstream report the issue to Quarkus directly.

Environment

  • StackGres version:0.6beta1

  • Kubernetes version (use kubectl version): v.1.12.10

  • Cloud provider or hardware configuration: all

Steps to reproduce

Enable the quarkus-hibernate-validator module, compile and run the operator

Relevant logs and/or screenshots

javax.validation.ValidationException: HV000083: The specified annotation javax.validation.constraints.NotNull defines no attribute 'groups'.
	at org.hibernate.validator.internal.util.annotation.AnnotationDescriptor.getMandatoryAttribute(AnnotationDescriptor.java:93)
	at org.hibernate.validator.internal.util.annotation.ConstraintAnnotationDescriptor.getGroups(ConstraintAnnotationDescriptor.java:35)
	at org.hibernate.validator.internal.metadata.descriptor.ConstraintDescriptorImpl.buildGroupSet(ConstraintDescriptorImpl.java:547)
	at org.hibernate.validator.internal.metadata.descriptor.ConstraintDescriptorImpl.<init>(ConstraintDescriptorImpl.java:181)
	at org.hibernate.validator.internal.metadata.descriptor.ConstraintDescriptorImpl.<init>(ConstraintDescriptorImpl.java:231)
	at org.hibernate.validator.internal.metadata.provider.AnnotationMetaDataProvider.buildConstraintDescriptor(AnnotationMetaDataProvider.java:587)
	at org.hibernate.validator.internal.metadata.provider.AnnotationMetaDataProvider.lambda$findConstraintAnnotations$0(AnnotationMetaDataProvider.java:542)
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
	at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1382)
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:482)
	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472)
	at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:566)
	at org.hibernate.validator.internal.metadata.provider.AnnotationMetaDataProvider.findConstraintAnnotations(AnnotationMetaDataProvider.java:543)
	at org.hibernate.validator.internal.metadata.provider.AnnotationMetaDataProvider.findConstraints(AnnotationMetaDataProvider.java:479)
	at org.hibernate.validator.internal.metadata.provider.AnnotationMetaDataProvider.findConstraints(AnnotationMetaDataProvider.java:461)
	at org.hibernate.validator.internal.metadata.provider.AnnotationMetaDataProvider.findPropertyMetaData(AnnotationMetaDataProvider.java:236)
	at org.hibernate.validator.internal.metadata.provider.AnnotationMetaDataProvider.getFieldMetaData(AnnotationMetaDataProvider.java:229)
	at org.hibernate.validator.internal.metadata.provider.AnnotationMetaDataProvider.retrieveBeanConfiguration(AnnotationMetaDataProvider.java:129)
	at org.hibernate.validator.internal.metadata.provider.AnnotationMetaDataProvider.getBeanConfiguration(AnnotationMetaDataProvider.java:120)
	at org.hibernate.validator.internal.metadata.BeanMetaDataManagerImpl.getBeanConfigurationForHierarchy(BeanMetaDataManagerImpl.java:224)
	at org.hibernate.validator.internal.metadata.BeanMetaDataManagerImpl.createBeanMetaData(BeanMetaDataManagerImpl.java:191)
	at org.hibernate.validator.internal.metadata.BeanMetaDataManagerImpl.getBeanMetaData(BeanMetaDataManagerImpl.java:156)
	at org.hibernate.validator.internal.engine.ValidatorImpl.validate(ValidatorImpl.java:156)
	at io.fabric8.kubernetes.api.builder.ValidationUtils.validate(ValidationUtils.java:53)
	at io.fabric8.kubernetes.api.model.ServiceAccountBuilder.build(ServiceAccountBuilder.java:80)
	at io.stackgres.operator.resource.SgPatroniRole.createServiceAccount(SgPatroniRole.java:61)
	at io.stackgres.operator.resource.SgPatroniRole.create(SgPatroniRole.java:44)
	at io.stackgres.operator.resource.SgPatroniRole_ClientProxy.create(SgPatroniRole_ClientProxy.zig:38)
	at io.stackgres.operator.controller.ClusterController.newStackGresCluster(ClusterController.java:51)
	at io.stackgres.operator.controller.ClusterController_ClientProxy.newStackGresCluster(ClusterController_ClientProxy.zig:38)
	at io.stackgres.operator.watcher.StackGresClusterWatcher.eventReceived(StackGresClusterWatcher.java:32)
	at io.stackgres.operator.watcher.StackGresClusterWatcher.eventReceived(StackGresClusterWatcher.java:18)
	at io.stackgres.operator.watcher.StackGresClusterWatcher_ClientProxy.eventReceived(StackGresClusterWatcher_ClientProxy.zig:124)
	at io.fabric8.kubernetes.client.utils.WatcherToggle.eventReceived(WatcherToggle.java:49)
	at io.fabric8.kubernetes.client.dsl.internal.WatchConnectionManager$1.onMessage(WatchConnectionManager.java:237)
	at okhttp3.internal.ws.RealWebSocket.onReadMessage(RealWebSocket.java:323)
	at okhttp3.internal.ws.WebSocketReader.readMessageFrame(WebSocketReader.java:219)
	at okhttp3.internal.ws.WebSocketReader.processNextFrame(WebSocketReader.java:105)
	at okhttp3.internal.ws.RealWebSocket.loopReader(RealWebSocket.java:274)
	at okhttp3.internal.ws.RealWebSocket$2.onResponse(RealWebSocket.java:214)
	at okhttp3.RealCall$AsyncCall.execute(RealCall.java:206)
	at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
	at com.oracle.svm.core.thread.JavaThreads.threadStartRoutine(JavaThreads.java:460)
	at com.oracle.svm.core.posix.thread.PosixJavaThreads.pthreadStartRoutine(PosixJavaThreads.java:193)

Links

Edited by Jorge Solorzano