I'm working on a Jakarta 8 application which runs on Payara 5.2020.4. Its uses CDI all over the place and its working without issues.
Now I want to use Bean Validation.
I have created a ConstraintValidator and want to inject some bean to it. This fails with
org.glassfish.hk2.api.UnsatisfiedDependencyException: There was no object available for injection at SystemInjecteeImpl(requiredType=Statistic,parent=MyValidator,qualifiers={},position=0,optional=false,self=false,unqualified=null,872556488)
The Statistic is injected successfully in many different places but here it fails. The validator is used for instance by an JSF view and there injection works. I came across this bug in Payara. But this should be fixed long time ago. So I guess I am missing something.
My validator looks like this:
@Named
public class MyValidator extends ServiceValidator implements ConstraintValidator<ServiceName, String> {
private final Statistic statistic;
@Inject
public MyValidator (Statistic statistic) {
this.statistic= statistic;
}
@Override
public boolean isValid(String value, ConstraintValidatorContext context) { ... }
public void validateName(FacesContext context, UIComponent component, String name) throws ValidatorException { ... }
This validator is used by a rest resource:
@Path("/rest/{serviceName}/{fileName}")
@POST
@Produces("text/plain")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response doSomething(
@Context HttpHeaders headers,
@PathParam("fileName") String fileName,
@ServiceName @PathParam("serviceName") String serviceName,
byte[] content)
{ ... }
As mentioned when used as follows in a JSF view injection works fine:
<h:inputText id="ServiceName" required="true" validator = "#{processScanFilesValidator.validateName}" ... >