Hi Gerhard, hi Leonardo,

Gerhard had already taken a look at this too.

JIRA-Issue: https://issues.apache.org/jira/browse/EXTVAL-102

Tom



----- Original Nachricht ----
Von:     Leonardo Uribe <[email protected]>
An:      MyFaces Discussion <[email protected]>
Datum:   30.06.2010 08:22
Betreff: Re: ExtVal: NullPointer during EL resolving for custom component

> Hi
> 
> Thanks for the demo, it helps a lot. I tried th with myfaces and it throws
> the same exception:
> 
> javax.faces.FacesException: java.lang.NullPointerException: name can not be
> null
>       at
> org.apache.myfaces.shared_impl.context.ExceptionHandlerImpl.wrap(ExceptionHa
> ndlerImpl.java:241)
> 
>       at
> org.apache.myfaces.shared_impl.context.ExceptionHandlerImpl.handle(Exception
> HandlerImpl.java:156)
>       at
> org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:1
> 69)
>       at
> org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:96)
> 
>       at javax.faces.webapp.FacesServlet.service(FacesServlet.java:189)
>       at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Application
> FilterChain.java:290)
>       at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh
> ain.java:206)
> 
>       at
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.ja
> va:233)
>       at
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.ja
> va:175)
>       at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128
> )
> 
>       at
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102
> )
>       at
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java
> :109)
>       at
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
> 
>       at
> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
>       at
> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http
> 11Protocol.java:583)
>       at 
> org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
> 
>       at java.lang.Thread.run(Thread.java:619)
> Caused by: java.lang.NullPointerException: name can not be null
>       at
> javax.faces.component.UIComponent.getValueExpression(UIComponent.java:543)
>       at
> org.apache.myfaces.el.unified.resolver.CompositeComponentELResolver$Composit
> eComponentAttributesMapWrapper.getExpression(CompositeComponentELResolver.jav
> a:208)
> 
>       at
> org.apache.myfaces.extensions.validator.core.el.ExtValELResolver.getComposit
> eComponentExpression(ExtValELResolver.java:277)
>       at
> org.apache.myfaces.extensions.validator.core.el.DefaultELHelper.getPropertyD
> etailsOfValueBinding(DefaultELHelper.java:169)
> 
>       at
> org.apache.myfaces.extensions.validator.core.metadata.extractor.DefaultCompo
> nentMetaDataExtractor.extract(DefaultComponentMetaDataExtractor.java:77)
>       at
> org.apache.myfaces.extensions.validator.util.ExtValUtils$1.extract(ExtValUti
> ls.java:233)
> 
>       at
> org.apache.myfaces.extensions.validator.core.interceptor.AbstractValidationI
> nterceptor.getPropertyInformation(AbstractValidationInterceptor.java:176)
>       at
> org.apache.myfaces.extensions.validator.core.interceptor.AbstractValidationI
> nterceptor.processAfterValidation(AbstractValidationInterceptor.java:166)
> 
>       at
> org.apache.myfaces.extensions.validator.core.interceptor.AbstractValidationI
> nterceptor.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:578)
>       at javax.faces.component.UIInput.validate(UIInput.java:510)
>       at javax.faces.component.UIInput.processValidators(UIInput.java:240)
>       at
> javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java
> :1218)
> 
>       at
> javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java
> :1218)
>       at javax.faces.component.UIForm.processValidators(UIForm.java:137)
>       at
> javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java
> :1218)
> 
>       at
> javax.faces.component.UIViewRoot._processValidatorsDefault(UIViewRoot.java:1
> 251)
>       at javax.faces.component.UIViewRoot.access$500(UIViewRoot.java:77)
>       at
> javax.faces.component.UIViewRoot$ProcessValidatorPhaseProcessor.process(UIVi
> ewRoot.java:1298)
> 
>       at javax.faces.component.UIViewRoot._process(UIViewRoot.java:1207)
>       at 
> javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:683)
>       at
> org.apache.myfaces.lifecycle.ProcessValidationsExecutor.execute(ProcessValid
> ationsExecutor.java:34)
> 
>       at
> org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:1
> 49)
> 
> The problem resides in how CompositeComponentELResolver works. In few
> words,
> it returns a Map that points to composite component attributes, but this
> map
> is traversed by default MapELResolver, not the same
> CompositeComponentELResolver, so ExtValELResolver wrapper does not receive
> the control before evaluate and compositeComponentExpressionBase is never
> set.
> 
> The solution should be do something similar to the hack done in
> FlashELResolver. In that case, the resolver checks if the base is
> instanceof
> the map (in myfaces case CompositeComponentAttributesMapWrapper) and if so
> return the value as MapELResolver does (or in other words as
> FlashELResolver
> does).
> 
> I have not tested this solution yet but I think it will work. The behavior
> proposed is not described on jsf 2.0 spec section 5.6.2.2, but I think we
> can consider it an implementation detail and create a fix on myfaces.
> Please
> create an issue on myfaces issue tracker and I'll propose a patch for this
> one.
> 
> regards,
> 
> Leonardo Uribe
> 

-- 
Hotelbewertung: Bloß nicht die Katze im Sack kaufen bzw. den Floh auf der 
Matratze buchen - 
ob geschäftlich oder privat - erst das Hotel im Reise-Channel auf arcor.de 
checken!
http://www.arcor.de/rd/footer.hotel

Reply via email to