Unsatisfied Dependency in ConstraintValidator

44 Views Asked by At

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}" ... >
0

There are 0 best solutions below