1

We use a GenericValidator in server calsses. The implementation is injected via RequestScoped Managed bean. When we run this example under Java EE 7 (Wildfly 13) everthing works fine. Now we try to migrate to Java EE 8 (Under Wildfly 14). Somehow we now get an NullPointerException. How can I get rid of the Error?

Here the Snipped:

password.xhtml

<p:password id="password"  widgetVar="#{cc.clientId}"
    value="#{cc.attrs.compBean.componentData[cc.clientId].value}">
    <f:validator for="password" validatorId="genericValidator" />
</p:password>

GenericValidator.java

...
import javax.faces.validator.FacesValidator;
import javax.faces.validator.Validator;
import javax.faces.validator.ValidatorException;
import javax.inject.Inject;

@FacesValidator("genericValidator")
public class GenericValidator implements Validator, ClientValidator, Serializable {
...

  @Inject
  private Validate validator;

  @Override
  public void validate(FacesContext fc, UIComponent uic, Object value) throws ValidatorException {
    validator.validate(fc, uic, value); // Here is the NullPointer (validator is null)

  }
...
}

Validate.java

import javax.enterprise.context.RequestScoped;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.validator.ValidatorException;
import javax.inject.Inject;
import javax.inject.Named;
import org.omnifaces.util.Ajax;

@Named
@RequestScoped
public class Validate implements Serializable {
...
}

Stacktrace

SEVERE [org.omnifaces.exceptionhandler.FullAjaxExceptionHandler] (default task-5) FullAjaxExceptionHandler: An exception occurred during processing JSF ajax request. Error page '/errorpage.xhtml' will be shown.: java.lang.NullPointerException
at COMPANY.client.ui.validation.GenericValidator.validate(GenericValidator.java:32)
at javax.faces.component.UIInput.validateValue(UIInput.java:1248)
at javax.faces.component.UIInput.validate(UIInput.java:1037)
at javax.faces.component.UIInput.executeValidate(UIInput.java:1334)
at javax.faces.component.UIInput.processValidators(UIInput.java:757)
at com.sun.faces.context.PartialViewContextImpl$PhaseAwareVisitCallback.visit(PartialViewContextImpl.java:632)
at com.sun.faces.component.visit.PartialVisitContext.invokeVisitCallback(PartialVisitContext.java:183)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1736)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1747)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1747)
at javax.faces.component.UINamingContainer.visitTree(UINamingContainer.java:177)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1747)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1747)
at javax.faces.component.UIForm.visitTree(UIForm.java:395)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1747)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1747)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1747)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1747)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1747)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1747)
at com.sun.faces.context.PartialViewContextImpl.processComponents(PartialViewContextImpl.java:424)
at com.sun.faces.context.PartialViewContextImpl.processPartial(PartialViewContextImpl.java:285)
at org.primefaces.context.PrimePartialViewContext.processPartial(PrimePartialViewContext.java:57)
at javax.faces.context.PartialViewContextWrapper.processPartial(PartialViewContextWrapper.java:252)
at org.omnifaces.context.OmniPartialViewContext.processPartial(OmniPartialViewContext.java:124)
at javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:1330)
at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:77)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:201)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:670)
at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:74)
at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:129)
at io.undertow.websockets.jsr.JsrWebSocketFilter.doFilter(JsrWebSocketFilter.java:173)
at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
at COMPANY.client.common.filter.LogFilter.doFilter(LogFilter.java:52)
at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
at COMPANY.client.ui.filter.AuthenticationFilter.doFilter(AuthenticationFilter.java:166)
at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
at org.omnifaces.filter.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:124)
at org.omnifaces.filter.HttpFilter.doFilter(HttpFilter.java:108)
at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
Kukeltje
  • 12,223
  • 4
  • 24
  • 47
Dominic Weiser
  • 1,446
  • 1
  • 20
  • 32
  • 1
    There has been changes in the CDI version between ee7 and 8 and with it detection of which classes are eligable for being a managed bean. Tried adding a postconstruct to the Validate.class and see if it is created at all? And read https://stackoverflow.com/questions/7531449/cdi-injection-into-a-facesconverter/7531487#7531487 Maybe omnifaces made it work and now it does not. – Kukeltje Sep 18 '18 at 08:30
  • 2
    Oh and changes in JSF... 2.2 -> 2.3. Maybe you need a newer omnifaces (3.2) – Kukeltje Sep 18 '18 at 08:40
  • Thank you very much, this was the missing hint! – Dominic Weiser Sep 18 '18 at 11:52
  • 1
    You are welcome. Please create an answer for this. Will for sure be helpful for others. – Kukeltje Sep 18 '18 at 13:13

1 Answers1

3

We had to upgrade the Omnifaces Version from 2.6 to 3.2. This was necessary because of the Upgrade from JSF 2.2 to 2.3 with Java EE 8.

Dominic Weiser
  • 1,446
  • 1
  • 20
  • 32