0

Our application has places where the user can upload images and display them.

We have been testing our app by taking a PDF file and renamed it from shipment.pdf to shipment.png.

Then we used PrimeFaces p:fileUpload to upload the fake image file. The UI uses a p:graphicImage to render these just uploaded and existing/persisted image files, however the JSF/PrimeFaces rendering fails with a NullPointerException:

12:01:00,909 SEVERE [org.primefaces.application.exceptionhandler.PrimeExceptionHandler] (default task-12) null: java.lang.NullPointerException
    at java.base/java.util.Base64$Encoder.encode(Base64.java:267)
    at java.base/java.util.Base64$Encoder.encodeToString(Base64.java:321)
    at deployment.ourapp.ear.ourapp-web.war//org.primefaces.util.DynamicContentSrcBuilder.buildBase64(DynamicContentSrcBuilder.java:192)
    at deployment.ourapp.ear.ourapp-web.war//org.primefaces.util.DynamicContentSrcBuilder.buildBase64(DynamicContentSrcBuilder.java:188)
    at deployment.ourapp.ear.ourapp-web.war//org.primefaces.util.DynamicContentSrcBuilder.build(DynamicContentSrcBuilder.java:107)
    at deployment.ourapp.ear.ourapp-web.war//org.primefaces.component.graphicimage.GraphicImageRenderer.getImageSrc(GraphicImageRenderer.java:81)
    at deployment.ourapp.ear.ourapp-web.war//org.primefaces.component.graphicimage.GraphicImageRenderer.encodeEnd(GraphicImageRenderer.java:46)
    at javax.faces.api@3.0.0.SP04-redhat-00001//javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:595)
    at javax.faces.api@3.0.0.SP04-redhat-00001//javax.faces.component.UIComponent.encodeAll(UIComponent.java:1654)
    at com.sun.jsf-impl@2.3.9.SP13-redhat-00001//com.sun.faces.facelets.component.RepeatRenderer.encodeChildren(RepeatRenderer.java:64)
    at com.sun.jsf-impl@2.3.9.SP13-redhat-00001//com.sun.faces.facelets.component.UIRepeat.process(UIRepeat.java:559)
    at com.sun.jsf-impl@2.3.9.SP13-redhat-00001//com.sun.faces.facelets.component.UIRepeat.encodeChildren(UIRepeat.java:1068)
    at com.sun.jsf-impl@2.3.9.SP13-redhat-00001//com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:278)
    at com.sun.jsf-impl@2.3.9.SP13-redhat-00001//com.sun.faces.renderkit.html_basic.GroupRenderer.encodeChildren(GroupRenderer.java:90)
    at javax.faces.api@3.0.0.SP04-redhat-00001//javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:566)
    at javax.faces.api@3.0.0.SP04-redhat-00001//javax.faces.component.UIComponent.encodeAll(UIComponent.java:1647)
    at com.sun.jsf-impl@2.3.9.SP13-redhat-00001//com.sun.faces.context.PartialViewContextImpl$PhaseAwareVisitCallback.visit(PartialViewContextImpl.java:615)
    at com.sun.jsf-impl@2.3.9.SP13-redhat-00001//com.sun.faces.component.visit.PartialVisitContext.invokeVisitCallback(PartialVisitContext.java:159)
    at javax.faces.api@3.0.0.SP04-redhat-00001//javax.faces.component.UIComponent.visitTree(UIComponent.java:1456)
    at javax.faces.api@3.0.0.SP04-redhat-00001//javax.faces.component.UIComponent.visitTree(UIComponent.java:1468)
    at javax.faces.api@3.0.0.SP04-redhat-00001//javax.faces.component.UIComponent.visitTree(UIComponent.java:1468)
    at javax.faces.api@3.0.0.SP04-redhat-00001//javax.faces.component.UIComponent.visitTree(UIComponent.java:1468)
    at javax.faces.api@3.0.0.SP04-redhat-00001//javax.faces.component.UIForm.visitTree(UIForm.java:347)
    at javax.faces.api@3.0.0.SP04-redhat-00001//javax.faces.component.UIComponent.visitTree(UIComponent.java:1468)
    at javax.faces.api@3.0.0.SP04-redhat-00001//javax.faces.component.UIComponent.visitTree(UIComponent.java:1468)
    at com.sun.jsf-impl@2.3.9.SP13-redhat-00001//com.sun.faces.context.PartialViewContextImpl.processComponents(PartialViewContextImpl.java:400)
    at com.sun.jsf-impl@2.3.9.SP13-redhat-00001//com.sun.faces.context.PartialViewContextImpl.processPartial(PartialViewContextImpl.java:319)
    at deployment.ourapp.ear.ourapp-web.war//org.primefaces.context.PrimePartialViewContext.processPartial(PrimePartialViewContext.java:65)
    at javax.faces.api@3.0.0.SP04-redhat-00001//javax.faces.context.PartialViewContextWrapper.processPartial(PartialViewContextWrapper.java:228)
    at deployment.ourapp.ear.ourapp-web.war//org.omnifaces.context.OmniPartialViewContext.processPartial(OmniPartialViewContext.java:122)
    at javax.faces.api@3.0.0.SP04-redhat-00001//javax.faces.component.UIViewRoot.encodeChildren(UIViewRoot.java:1102)
    at javax.faces.api@3.0.0.SP04-redhat-00001//javax.faces.component.UIComponent.encodeAll(UIComponent.java:1647)
    at com.sun.jsf-impl@2.3.9.SP13-redhat-00001//com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:442)
    at com.sun.jsf-impl@2.3.9.SP13-redhat-00001//com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:170)
    at javax.faces.api@3.0.0.SP04-redhat-00001//javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:132)
    at javax.faces.api@3.0.0.SP04-redhat-00001//javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:132)
    at javax.faces.api@3.0.0.SP04-redhat-00001//javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:132)
    at javax.faces.api@3.0.0.SP04-redhat-00001//javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:132)
    at deployment.ourapp.ear.ourapp-web.war//org.omnifaces.viewhandler.OmniViewHandler.renderView(OmniViewHandler.java:155)
    at com.sun.jsf-impl@2.3.9.SP13-redhat-00001//com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:102)
    at com.sun.jsf-impl@2.3.9.SP13-redhat-00001//com.sun.faces.lifecycle.Phase.doPhase(Phase.java:76)
    at com.sun.jsf-impl@2.3.9.SP13-redhat-00001//com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:199)
    at javax.faces.api@3.0.0.SP04-redhat-00001//javax.faces.webapp.FacesServlet.executeLifecyle(FacesServlet.java:708)
    at javax.faces.api@3.0.0.SP04-redhat-00001//javax.faces.webapp.FacesServlet.service(FacesServlet.java:451)
    at io.undertow.servlet@2.0.38.SP1-redhat-00001//io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:74)
    at io.undertow.servlet@2.0.38.SP1-redhat-00001//io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:129)
    at deployment.ourapp.ear.ourapp-web.war//org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:108)
    at io.undertow.servlet@2.0.38.SP1-redhat-00001//io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
    at io.undertow.servlet@2.0.38.SP1-redhat-00001//io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
    at deployment.ourapp.ear//org.ocpsoft.rewrite.servlet.RewriteFilter.doFilter(RewriteFilter.java:226)
    at io.undertow.servlet@2.0.38.SP1-redhat-00001//io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
    at io.undertow.servlet@2.0.38.SP1-redhat-00001//io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
    at io.undertow.servlet@2.0.38.SP1-redhat-00001//io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84)
    at io.undertow.servlet@2.0.38.SP1-redhat-00001//io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
    at io.undertow.servlet@2.0.38.SP1-redhat-00001//io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:68)
    at io.undertow.servlet@2.0.38.SP1-redhat-00001//io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
    at io.undertow.core@2.0.38.SP1-redhat-00001//io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
    at io.undertow.servlet@2.0.38.SP1-redhat-00001//io.undertow.servlet.handlers.RedirectDirHandler.handleRequest(RedirectDirHandler.java:68)
    at io.undertow.core@2.0.38.SP1-redhat-00001//io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
    at io.undertow.core@2.0.38.SP1-redhat-00001//io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
    at io.undertow.servlet@2.0.38.SP1-redhat-00001//io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:251)
    at io.undertow.servlet@2.0.38.SP1-redhat-00001//io.undertow.servlet.handlers.ServletInitialHandler.dispatchToPath(ServletInitialHandler.java:186)
    at io.undertow.servlet@2.0.38.SP1-redhat-00001//io.undertow.servlet.spec.RequestDispatcherImpl.forwardImpl(RequestDispatcherImpl.java:227)
    at io.undertow.servlet@2.0.38.SP1-redhat-00001//io.undertow.servlet.spec.RequestDispatcherImpl.forwardImplSetup(RequestDispatcherImpl.java:149)
    at io.undertow.servlet@2.0.38.SP1-redhat-00001//io.undertow.servlet.spec.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:111)
    at deployment.ourapp.ear//org.ocpsoft.rewrite.servlet.impl.HttpRewriteResultHandler.handleResult(HttpRewriteResultHandler.java:42)
    at deployment.ourapp.ear//org.ocpsoft.rewrite.servlet.RewriteFilter.rewrite(RewriteFilter.java:297)
    at deployment.ourapp.ear//org.ocpsoft.rewrite.servlet.RewriteFilter.doFilter(RewriteFilter.java:198)
    at io.undertow.servlet@2.0.38.SP1-redhat-00001//io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
    at io.undertow.servlet@2.0.38.SP1-redhat-00001//io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
    at deployment.ourapp.ear.ourapp-web.war//de.itzbund.riko.plattform.web.base.security.DefaultTargetUrlFilter.doFilter(DefaultTargetUrlFilter.java:81)
    at io.undertow.servlet@2.0.38.SP1-redhat-00001//io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
    at io.undertow.servlet@2.0.38.SP1-redhat-00001//io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
    at deployment.ourapp.ear.ourapp-web.war//de.itzbund.riko.plattform.web.base.filter.Utf8Filter.doFilter(Utf8Filter.java:34)
    at io.undertow.servlet@2.0.38.SP1-redhat-00001//io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
    at io.undertow.servlet@2.0.38.SP1-redhat-00001//io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
    at io.undertow.servlet@2.0.38.SP1-redhat-00001//io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84)
    at io.undertow.servlet@2.0.38.SP1-redhat-00001//io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
    at io.undertow.servlet@2.0.38.SP1-redhat-00001//io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:68)
    at io.undertow.servlet@2.0.38.SP1-redhat-00001//io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
    at org.wildfly.extension.undertow@7.3.8.GA-redhat-00001//org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
    at io.undertow.core@2.0.38.SP1-redhat-00001//io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
    at io.undertow.servlet@2.0.38.SP1-redhat-00001//io.undertow.servlet.handlers.RedirectDirHandler.handleRequest(RedirectDirHandler.java:68)
    at io.undertow.servlet@2.0.38.SP1-redhat-00001//io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:111)
    at io.undertow.servlet@2.0.38.SP1-redhat-00001//io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)
    at io.undertow.core@2.0.38.SP1-redhat-00001//io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
    at io.undertow.core@2.0.38.SP1-redhat-00001//io.undertow.security.handlers.AuthenticationConstraintHandler.handleRequest(AuthenticationConstraintHandler.java:53)
    at io.undertow.core@2.0.38.SP1-redhat-00001//io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)
    at io.undertow.servlet@2.0.38.SP1-redhat-00001//io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)
    at io.undertow.servlet@2.0.38.SP1-redhat-00001//io.undertow.servlet.handlers.security.ServletSecurityConstraintHandler.handleRequest(ServletSecurityConstraintHandler.java:59)
    at io.undertow.core@2.0.38.SP1-redhat-00001//io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)
    at io.undertow.servlet@2.0.38.SP1-redhat-00001//io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)
    at io.undertow.core@2.0.38.SP1-redhat-00001//io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50)
    at io.undertow.core@2.0.38.SP1-redhat-00001//io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)
    at io.undertow.core@2.0.38.SP1-redhat-00001//io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
    at org.wildfly.extension.undertow@7.3.8.GA-redhat-00001//org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
    at io.undertow.core@2.0.38.SP1-redhat-00001//io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
    at org.wildfly.extension.undertow@7.3.8.GA-redhat-00001//org.wildfly.extension.undertow.deployment.GlobalRequestControllerHandler.handleRequest(GlobalRequestControllerHandler.java:68)
    at io.undertow.core@2.0.38.SP1-redhat-00001//io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
    at io.undertow.servlet@2.0.38.SP1-redhat-00001//io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:269)
    at io.undertow.servlet@2.0.38.SP1-redhat-00001//io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:78)
    at io.undertow.servlet@2.0.38.SP1-redhat-00001//io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:133)
    at io.undertow.servlet@2.0.38.SP1-redhat-00001//io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:130)
    at io.undertow.servlet@2.0.38.SP1-redhat-00001//io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)
    at io.undertow.servlet@2.0.38.SP1-redhat-00001//io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
    at org.wildfly.extension.undertow@7.3.8.GA-redhat-00001//org.wildfly.extension.undertow.security.SecurityContextThreadSetupAction.lambda$create$0(SecurityContextThreadSetupAction.java:105)
    at org.wildfly.extension.undertow@7.3.8.GA-redhat-00001//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1530)
    at org.wildfly.extension.undertow@7.3.8.GA-redhat-00001//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1530)
    at org.wildfly.extension.undertow@7.3.8.GA-redhat-00001//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1530)
    at org.wildfly.extension.undertow@7.3.8.GA-redhat-00001//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1530)
    at org.wildfly.extension.undertow@7.3.8.GA-redhat-00001//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1530)
    at io.undertow.servlet@2.0.38.SP1-redhat-00001//io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:249)
    at io.undertow.servlet@2.0.38.SP1-redhat-00001//io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:78)
    at io.undertow.servlet@2.0.38.SP1-redhat-00001//io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:99)
    at io.undertow.core@2.0.38.SP1-redhat-00001//io.undertow.server.Connectors.executeRootHandler(Connectors.java:390)
    at io.undertow.core@2.0.38.SP1-redhat-00001//io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:830)
    at org.jboss.threads@2.3.3.Final-redhat-00001//org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
    at org.jboss.threads@2.3.3.Final-redhat-00001//org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1982)
    at org.jboss.threads@2.3.3.Final-redhat-00001//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486)
    at org.jboss.threads@2.3.3.Final-redhat-00001//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1377)
    at org.jboss.xnio@3.7.12.Final-redhat-00001//org.xnio.XnioWorker$WorkerThreadFactory$1$1.run(XnioWorker.java:1280)
    at java.base/java.lang.Thread.run(Thread.java:829)

This is somewhat understandable: the browser expects to read the PNG header + data, which are some PDF bytes, and then gets confused.

QUESTION/S:

How do you best handle this error in a JSF/PrimeFaces application?

Are there any best practices?

Any other recommendations?

Afterthoughts

In the current setup of our webapp this results in an "internal server error", because of an exception handler wrapper to catch the exception an react accordingly.

I guess there are two options here:

  1. Analyze the bytes being sent really being valid for the file extension and display a message to the user if wrong data OR
  2. Catch this specific exception in some way and display a message to the user
Kawu
  • 13,170
  • 32
  • 116
  • 191

0 Answers0