Hi,

the following NPE occured using Myfaces ExtVal:

java.lang.NullPointerException
        at 
javax.faces.component.UIComponent.getValueExpression(UIComponent.java:338)
        at 
com.sun.faces.el.CompositeComponentAttributesELResolver$ExpressionEvalMap.getExpression(CompositeComponentAttributesELResolver.java:314)
        at 
org.apache.myfaces.extensions.validator.core.el.ExtValELResolver.getCompositeComponentExpression(ExtValELResolver.java:277)
        at 
org.apache.myfaces.extensions.validator.core.el.DefaultELHelper.getPropertyDetailsOfValueBinding(DefaultELHelper.java:169)
        at 
org.apache.myfaces.extensions.validator.core.metadata.extractor.DefaultComponentMetaDataExtractor.extract(DefaultComponentMetaDataExtractor.java:77)
        at 
org.apache.myfaces.extensions.validator.core.interceptor.AbstractValidationInterceptor.getPropertyInformation(AbstractValidationInterceptor.java:176)
        at 
org.apache.myfaces.extensions.validator.core.interceptor.AbstractValidationInterceptor.processAfterValidation(AbstractValidationInterceptor.java:166)
        at 
org.apache.myfaces.extensions.validator.core.interceptor.AbstractValidationInterceptor.beforeGetConvertedValue(AbstractValidationInterceptor.java:153)
        at 
org.apache.myfaces.extensions.validator.core.renderkit.ExtValRendererWrapper.getConvertedValue(ExtValRendererWrapper.java:369)
        at javax.faces.component.UIInput.getConvertedValue(UIInput.java:1008)
        at javax.faces.component.UIInput.validate(UIInput.java:934)
        at javax.faces.component.UIInput.executeValidate(UIInput.java:1189)
        at javax.faces.component.UIInput.processValidators(UIInput.java:691)
        at 
javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1080)
        at 
javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1080)
        at javax.faces.component.UIForm.processValidators(UIForm.java:243)
        at 
javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1080)
        at 
javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1080)
        at 
javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:1180)
        at 
com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76)
        at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
        at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:312)


I used the following code:

Page:

          <ui:composition template="/resources/templates/test-template.xhtml">
        
                <ui:define name="test-workspace">
                        
                        <ui:remove> 
                                a) works <parts-test:nestedCC 
myValue="#{personBean.person}"/>
                                b) works <parts-test:nestedCC 
myValue="#{personBean.person.adresse}"/>
                        </ui:remove> 
                        
                        c) NPE!!! <parts-test:nestedCC 
myValue="#{personBean.person.adresse.plz}"/>
                        
                </ui:define>
                
        </ui:composition>

CustomComponent:

        <composite:interface>
                <composite:attribute name="myValue" required="true" />
        </composite:interface>

       <composite:implementation>
        
                <ui:remove> 
                        a) works <h:inputText id="theValue" 
value="#{cc.attrs.myValue.adresse.plz}" />
                        b) works <h:inputText id="theValue" 
value="#{cc.attrs.myValue.plz}" />
                </ui:remove> 
        
                    c) NPE!!! <h:inputText id="theValue" 
value="#{cc.attrs.myValue}" /> 

        </composite:implementation>

The code behind the scenes is:
- a managed bean "PersonBean"
- ...which refers to an object "Person" which refers to an object "Adresse" 
which has a string property "plz"
- for testing purposes I implemented some get/setPlz in PersonBean and Person 
too which provide the value stored in Adresse.plz

In case c), using a deeply nested EL expression, the NPE occurs.

In the ExtVal code I found in 
org.apache.myfaces.extensions.validator.core.el.DefaultELHelper.getPropertyDetailsOfValueBinding(UIComponent):

@ToDo(value = Priority.HIGH, description = "check if it works with nested 
composite components")

Is this TODO still an open one or is the EL expression revealing a new bug? 

-- 
WM 2010: Top News, Spielpläne, Public Viewing-Termine, E-Cards und alles, 
was der Fan sonst noch braucht, gibt´s im Sport-Channel auf arcor.de.
http://www.arcor.de/rd/footer.wm2010

Reply via email to