[
https://issues.apache.org/jira/browse/TOMEE-4450?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17923678#comment-17923678
]
Jonathan Gallimore edited comment on TOMEE-4450 at 2/4/25 12:19 PM:
--------------------------------------------------------------------
Did a bit of digging on this one, and it does look similar to TOMEE-4355. I
tried changing the RequestProducer in Mojarra so it looks like this:
{quote}public class RequestProducer extends CdiProducer<HttpServletRequest> {
/**
* Serialization version
*/
private static final long serialVersionUID = 1L;
public RequestProducer(BeanManager beanManager) {
super
.name("request")
.scope(RequestScoped.class)
.beanClass(beanManager, HttpServletRequest.class)
.types(HttpServletRequest.class)
.create(e -> (HttpServletRequest)
FacesContext.getCurrentInstance().getExternalContext().getRequest());
}
}
{quote}
i.e. adding in the Generic as opposed to <Object> on the class, and specifying
.beanClass and .type
This, however, creates other conflicts:
{quote} Caused by: org.apache.openejb.OpenEJBRuntimeException:
org.apache.webbeans.exception.WebBeansDeploymentException:
jakarta.enterprise.inject.AmbiguousResolutionException: There is more than one
Bean with type jakarta.servlet.http.HttpServletRequest Qualifiers:
[@jakarta.enterprise.inject.Default()]
for injection into Field Injection Point, field name : request, Bean Owner :
[BaseUrlProducer, WebBeansType:MANAGED, Name:null, API
Types:[java.lang.Object,org.apache.tomee.security.cdi.openid.BaseUrlProducer],
Qualifiers:[jakarta.enterprise.inject.Default,jakarta.enterprise.inject.Any]]
found beans:
HttpServletRequest, WebBeansType:MANAGED, Name:null, API
Types:[java.lang.Object,jakarta.servlet.ServletRequest,jakarta.servlet.http.HttpServletRequest],
Qualifiers:[jakarta.enterprise.inject.Default,jakarta.enterprise.inject.Any]
from
jar:file:/tmp/apache-tomee/lib/servlet-api.jar!/jakarta/servlet/http/HttpServletRequest.class
HttpServletRequest, WebBeansType:THIRDPARTY, Name:request, API
Types:[jakarta.servlet.http.HttpServletRequest,com.sun.faces.cdi.RequestProducer],
Qualifiers:[jakarta.enterprise.inject.Default,jakarta.enterprise.inject.Any]
from
jar:file:/tmp/apache-tomee/lib/servlet-api.jar!/jakarta/servlet/http/HttpServletRequest.class
at
org.apache.openejb.cdi.OpenEJBLifecycle.startApplication(OpenEJBLifecycle.java:200)
at
org.apache.openejb.cdi.ThreadSingletonServiceImpl.initialize(ThreadSingletonServiceImpl.java:269)
... 47 more
{quote}
I'll keep digging, but I'm not entirely sure how to resolve that at the moment
(ideas appreciated!)
was (Author: jgallimore):
Did a bit of digging on this one, and it does look similar to TOMEE-4355. I
tried changing the RequestProducer in Mojarra so it looks like this:
```
public class RequestProducer extends CdiProducer<HttpServletRequest> {
/**
* Serialization version
*/
private static final long serialVersionUID = 1L;
public RequestProducer(BeanManager beanManager) {
super
.name("request")
.scope(RequestScoped.class)
.beanClass(beanManager, HttpServletRequest.class)
.types(HttpServletRequest.class)
.create(e -> (HttpServletRequest)
FacesContext.getCurrentInstance().getExternalContext().getRequest());
}
}
```
i.e. adding in the Generic as opposed to <Object> on the class, and specifying
.beanClass and .type
This, however, creates other conflicts:
```
Caused by: org.apache.openejb.OpenEJBRuntimeException:
org.apache.webbeans.exception.WebBeansDeploymentException:
jakarta.enterprise.inject.AmbiguousResolutionException: There is more than one
Bean with type jakarta.servlet.http.HttpServletRequest Qualifiers:
[@jakarta.enterprise.inject.Default()]
for injection into Field Injection Point, field name : request, Bean Owner :
[BaseUrlProducer, WebBeansType:MANAGED, Name:null, API
Types:[java.lang.Object,org.apache.tomee.security.cdi.openid.BaseUrlProducer],
Qualifiers:[jakarta.enterprise.inject.Default,jakarta.enterprise.inject.Any]]
found beans:
HttpServletRequest, WebBeansType:MANAGED, Name:null, API
Types:[java.lang.Object,jakarta.servlet.ServletRequest,jakarta.servlet.http.HttpServletRequest],
Qualifiers:[jakarta.enterprise.inject.Default,jakarta.enterprise.inject.Any]
from
jar:file:/tmp/apache-tomee/lib/servlet-api.jar!/jakarta/servlet/http/HttpServletRequest.class
HttpServletRequest, WebBeansType:THIRDPARTY, Name:request, API
Types:[jakarta.servlet.http.HttpServletRequest,com.sun.faces.cdi.RequestProducer],
Qualifiers:[jakarta.enterprise.inject.Default,jakarta.enterprise.inject.Any]
from
jar:file:/tmp/apache-tomee/lib/servlet-api.jar!/jakarta/servlet/http/HttpServletRequest.class
at
org.apache.openejb.cdi.OpenEJBLifecycle.startApplication(OpenEJBLifecycle.java:200)
at
org.apache.openejb.cdi.ThreadSingletonServiceImpl.initialize(ThreadSingletonServiceImpl.java:269)
... 47 more
```
I'll keep digging, but I'm not entirely sure how to resolve that at the moment
(ideas appreciated!)
> EL expressions in Jakarta Faces not working with Mojarra
> --------------------------------------------------------
>
> Key: TOMEE-4450
> URL: https://issues.apache.org/jira/browse/TOMEE-4450
> Project: TomEE
> Issue Type: Bug
> Components: TomEE Core Server
> Affects Versions: 10.0.0
> Reporter: Markus Jung
> Priority: Major
> Attachments: mojarra-el.zip
>
>
> Reported via user list by Till Gräfenberg:
> [https://lists.apache.org/thread/zf2oo293818kpcbtmln5g4c7jn1v4b4g]
>
> Following XHTML fails to render
> {code:java}
> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="jakarta.faces.html">
> <h:body><h:outputText
> value="#{request.contextPath}"/></h:body></html>
> {code}
> Exception:
> {code:java}
> 30-Jan-2025 12:57:32.008 SEVERE [http-nio-8080-exec-2]
> com.sun.faces.application.view.FaceletViewHandlingStrategy.handleRenderException
> Error Rendering View[/test.xhtml]
> jakarta.el.PropertyNotFoundException: /test.xhtml @2,41
> value="#{request.contextPath}": Property [contextPath] not found on type
> [org.apache.webbeans.custom.Object$$OwbNormalScopeProxy6949990480]
> at
> com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:75)
> at
> jakarta.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:206)
> at
> jakarta.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:175)
> at
> jakarta.faces.component.UIOutput.getValue(UIOutput.java:134)
> at
> com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getValue(HtmlBasicInputRenderer.java:163)
> at
> com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getCurrentValue(HtmlBasicRenderer.java:303)
> at
> com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeEnd(HtmlBasicRenderer.java:135)
> at
> jakarta.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:586)
> at
> jakarta.faces.component.UIComponent.encodeAll(UIComponent.java:1442)
> at
> jakarta.faces.component.UIComponent.encodeAll(UIComponent.java:1438)
> at
> jakarta.faces.component.UIComponent.encodeAll(UIComponent.java:1438)
> at
> com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:449)
> at
> com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:160)
> at
> jakarta.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:125)
> at
> com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:93)
> at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:72)
> at
> com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:150)
> at
> jakarta.faces.webapp.FacesServlet.executeLifecyle(FacesServlet.java:692)
> at
> jakarta.faces.webapp.FacesServlet.service(FacesServlet.java:449)
> at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)
> at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
> at
> org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
> at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
> at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
> at
> org.apache.openejb.server.httpd.EEFilter.doFilter(EEFilter.java:67)
> at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
> at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
> at
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)
> at
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)
> at
> org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:45)
> at
> org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483)
> at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)
> at
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
> at
> org.apache.tomee.catalina.OpenEJBSecurityListener$RequestCapturer.invoke(OpenEJBSecurityListener.java:97)
> at
> org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:663)
> at
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
> at
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)
> at
> org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:397)
> at
> org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
> at
> org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:905)
> at
> org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)
> at
> org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
> at
> org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)
> at
> org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
> at
> org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)
> at java.base/java.lang.Thread.run(Thread.java:840)
> Caused by: jakarta.el.PropertyNotFoundException: Property
> [contextPath] not found on type
> [org.apache.webbeans.custom.Object$$OwbNormalScopeProxy6949990480]
> at
> jakarta.el.BeanELResolver$BeanProperties.get(BeanELResolver.java:261)
> at jakarta.el.BeanELResolver.property(BeanELResolver.java:330)
> at jakarta.el.BeanELResolver.getValue(BeanELResolver.java:99)
> at
> com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:139)
> at
> com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:164)
> at org.apache.el.parser.AstValue.getValue(AstValue.java:161)
> at
> org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:152)
> at
> org.apache.webbeans.el22.WrappedValueExpression.getValue(WrappedValueExpression.java:67)
> at
> com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:73)
> ... 45 more {code}
> Probably similar to what we had with TOMEE-4355 a while ago
--
This message was sent by Atlassian Jira
(v8.20.10#820010)