1

We're currently porting our GlassFish 3.2.1.x webapp to JBoss EAP 6.4.6, but we're getting a rather strange exception with a page that contains (shortened):

<h:panelGroup id="absence-panel"
              layout="block"
              styleClass="bx-accordion-correction">

    <h:panelGroup layout="block"
                  styleClass="left-button-panel">
        <p:commandButton id="add-absence-btn"
                         icon="ui-icon ui-icon-document"
                         value="#{msg['common.action.add.label']}"
                         actionListener="#{employeeAbsenceManager.add}"
                         immediate="true"
                         process="@this"
                         update="absence-panel
                                 :content-form:employee-navigation
                                 :content-form:msgs
                                 :content-form:growl"
                         oncomplete="scrollContentToSubPanel(this);"
                         disabled="#{employeeManager.readOnly or employeeAbsenceManager.mode eq 'ADD' or employeeAbsenceManager.mode eq 'EDIT'}"
                         styleClass="bx-first-button">
            <p:resetInput target=":content-form:accor-panel:absence-subpanel" />
        </p:commandButton>
    </h:panelGroup>

    <p:blockUI block="absence-dir-list"
               blocked="#{employeeAbsenceManager.mode eq 'ADD' or employeeAbsenceManager.mode eq 'EDIT'}" />

    <p:dataTable id="absence-dir-list"
                 value="#{employeeAbsenceManager.dataModel}"
                 var="abs"
                 selection="#{employeeAbsenceManager.selectedEntity}"
                 selectionMode="single"
                 resizableColumns="true"
                 rowKey="#{abs.timestampId}"
                 rowStyleClass="#{abs eq employeeAbsenceManager.selectedEntity ? 'ui-state-highlight' : null}"
                 paginator="true"
                 paginatorPosition="bottom"
                 rows="10"
                 rowsPerPageTemplate="10,20"
                 paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
                 emptyMessage="#{employeeAbsenceManager.activeOnly ? msg['entity.absence.list.emptyMessageActive'] : msg['entity.absence.list.emptyMessage']}"
                 styleClass="bx-datatable-header-hidden mt-10px datatable-content-scrolling max-width-1300">
        ...
    </p:dataTable>

    <ui:include src="absenceSubPanel.xhtml" />

    <h:panelGroup id="absences-validator">
        <o:validateMultiple components="absence-type absence-begin-date #{employeeAbsenceManager.uniqueConstraintWithRemarks ? 'absence-remarks' : ''}"
                            validator="#{employeeAbsenceManager.validateUniqueAbsences}"
                            message="#{employeeAbsenceManager.uniqueConstraintWithRemarks ?
                                       msg['entity.absence.notUniqueMessageWithRemarks'] :
                                       msg['entity.absence.notUniqueMessageWithoutRemarks']}" />
    </h:panelGroup>
</h:panelGroup>

The <ui:include src="absenceSubPanel.xhtml" /> contains the <o:validateMultiple>'s components. It's the sub panel for an absence (e.g. vacation, sickness, some educational measure for an employee).

The remarks are conditional depending on some customer setting whether they have absences with or without mandatory remarks.

We get the following exception:

16:07:15,727 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/cmc-jboss].[Faces Servlet]] (http-/127.0.0.1:8443-6) JBWEB000236: Servlet.service() for servlet Faces Servlet threw exception: javax.enterprise.event.ObserverException
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) [rt.jar:1.7.0_72]
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) [rt.jar:1.7.0_72]
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) [rt.jar:1.7.0_72]
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526) [rt.jar:1.7.0_72]
    at java.lang.Class.newInstance(Class.java:379) [rt.jar:1.7.0_72]
    at org.jboss.weld.util.reflection.SecureReflections$16.work(SecureReflections.java:344) [weld-core-1.1.31.Final-redhat-1.jar:1.1.31.Final-redhat-1]
    at org.jboss.weld.util.reflection.SecureReflectionAccess.run(SecureReflectionAccess.java:52) [weld-core-1.1.31.Final-redhat-1.jar:1.1.31.Final-redhat-1]
    at org.jboss.weld.util.reflection.SecureReflectionAccess.runAsInstantiation(SecureReflectionAccess.java:173) [weld-core-1.1.31.Final-redhat-1.jar:1.1.31.Final-redhat-1]
    at org.jboss.weld.util.reflection.SecureReflections.newInstance(SecureReflections.java:341) [weld-core-1.1.31.Final-redhat-1.jar:1.1.31.Final-redhat-1]
    at org.jboss.weld.injection.Exceptions.rethrowException(Exceptions.java:33) [weld-core-1.1.31.Final-redhat-1.jar:1.1.31.Final-redhat-1]
    at org.jboss.weld.injection.Exceptions.rethrowException(Exceptions.java:73) [weld-core-1.1.31.Final-redhat-1.jar:1.1.31.Final-redhat-1]
    at org.jboss.weld.injection.MethodInjectionPoint.invokeOnInstanceWithSpecialValue(MethodInjectionPoint.java:171) [weld-core-1.1.31.Final-redhat-1.jar:1.1.31.Final-redhat-1]
    at java.lang.Thread.run(Thread.java:745) [rt.jar:1.7.0_72]
Caused by: javax.servlet.ServletException: Expression Error: Named Object: org.omnifaces.component.validator.ValidateMultiple not found.
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:606) [jsf-api-2.1.6.jar:2.1.6-SNAPSHOT]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:295) [jbossweb-7.5.12.Final-redhat-1.jar:7.5.12.Final-redhat-1]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214) [jbossweb-7.5.12.Final-redhat-1.jar:7.5.12.Final-redhat-1]
    at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:79) [primefaces-3.5.jar:3.5.28]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:246) [jbossweb-7.5.12.Final-redhat-1.jar:7.5.12.Final-redhat-1]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214) [jbossweb-7.5.12.Final-redhat-1.jar:7.5.12.Final-redhat-1]
    at org.jboss.solder.servlet.exception.CatchExceptionFilter.doFilter(CatchExceptionFilter.java:65) [solder-impl-3.2.0-20130114.052037-75.jar:3.2.0-SNAPSHOT]
    ... 31 more
Caused by: javax.faces.FacesException: Expression Error: Named Object: org.omnifaces.component.validator.ValidateMultiple not found.
    at com.sun.faces.application.ApplicationImpl.createComponentApplyAnnotations(ApplicationImpl.java:1910) [jsf-impl-2.1.6.jar:2.1.6-SNAPSHOT]
    at com.sun.faces.application.ApplicationImpl.createComponent(ApplicationImpl.java:1164) [jsf-impl-2.1.6.jar:2.1.6-SNAPSHOT]
    at org.jboss.as.weld.webtier.jsf.ForwardingApplication.createComponent(ForwardingApplication.java:110) [jboss-as-weld-7.5.6.Final-redhat-2.jar:7.5.6.Final-redhat-2]
    at javax.faces.application.ApplicationWrapper.createComponent(ApplicationWrapper.java:594) [jsf-api-2.1.6.jar:2.1.6-SNAPSHOT]
    at javax.faces.application.ApplicationWrapper.createComponent(ApplicationWrapper.java:594) [jsf-api-2.1.6.jar:2.1.6-SNAPSHOT]
    at org.jboss.seam.faces.environment.SeamApplicationWrapper$Proxy$_$$_WeldClientProxy.createComponent(SeamApplicationWrapper$Proxy$_$$_WeldClientProxy.java) [seam-faces-3.2.0-20130126.053739-28.jar:3.2.0-SNAPSHOT]
    at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.createComponent(ComponentTagHandlerDelegateImpl.java:510) [jsf-impl-2.1.6.jar:2.1.6-SNAPSHOT]
    at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:157) [jsf-impl-2.1.6.jar:2.1.6-SNAPSHOT]
    at javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:120) [jsf-api-2.1.6.jar:2.1.6-SNAPSHOT]
    at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:98) [jsf-api-2.1.6.jar:2.1.6-SNAPSHOT]
    at javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:137) [jsf-api-2.1.6.jar:2.1.6-SNAPSHOT]
    at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:184) [jsf-impl-2.1.6.jar:2.1.6-SNAPSHOT]

OmniFaces version is 1.7. We're also using PrimeFaces 3.5.28 (the last of the 3.5 tree) and Seam Faces 3.2.0.

Any ideas what could cause this and how to fix it?

Thanks

BalusC
  • 1,082,665
  • 372
  • 3,610
  • 3,555
Kawu
  • 13,647
  • 34
  • 123
  • 195
  • This can happen if OmniFaces is misplaced in e.g. EAR/lib instad of WAR's WEB-INF/lib. Did you verify if the build is all right? See also http://omnifaces.org/#installation – BalusC May 30 '16 at 17:29
  • We have quite a big WAR file, no EAR. The build should be ok. See answer, too. – Kawu May 31 '16 at 09:30
  • Can you ensure that `metadata-complete` is `false`? – BalusC May 31 '16 at 09:38
  • Errr... never heard before. :-/ What is that anyway? – Kawu May 31 '16 at 10:01
  • A setting in `` element. If there is a `` then JSF won't scan WEB-INF/lib JARs for annotations. – BalusC May 31 '16 at 10:02

1 Answers1

1

We have just been able to get rid of the exception by putting the following into the faces-config.xml file:

<component>
    <component-type>org.omnifaces.component.validator.ValidateMultiple</component-type>
    <component-class>org.omnifaces.component.validator.ValidateMultiple</component-class>
</component>

Is there any explanation/assumption for why this is the remedy?

Kawu
  • 13,647
  • 34
  • 123
  • 195
  • 1
    That's just a work around for `@FacesComponent` annotations not being recognized for libraries in WEB-INF/lib. – BalusC May 31 '16 at 09:38