Shi Jinghai created OFBIZ-9483:
----------------------------------

             Summary: Enable EL in OFBiz
                 Key: OFBIZ-9483
                 URL: https://issues.apache.org/jira/browse/OFBIZ-9483
             Project: OFBiz
          Issue Type: Improvement
          Components: ALL COMPONENTS
    Affects Versions: 16.11.02
            Reporter: Shi Jinghai
            Assignee: Shi Jinghai
            Priority: Trivial


While deploying CAS and Drools-Workbench in OFBiz 16.11.02, the pages with EL 
report error messages:
 
{code:java}
java.lang.NullPointerException
        javax.el.CompositeELResolver.add(CompositeELResolver.java:117)
        org.apache.jasper.el.JasperELResolver.add(JasperELResolver.java:70)
        org.apache.jasper.el.JasperELResolver.<init>(JasperELResolver.java:58)
        
org.apache.jasper.runtime.JspApplicationContextImpl.createELResolver(JspApplicationContextImpl.java:120)
        
org.apache.jasper.runtime.JspApplicationContextImpl.createELContext(JspApplicationContextImpl.java:89)
        
org.apache.jasper.runtime.PageContextImpl.getELContext(PageContextImpl.java:949)
        
org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:934)
        
org.apache.jsp.WEB_002dINF.view.jsp.default_.ui.casGenericSuccessView_jsp._jspService(casGenericSuccessView_jsp.java:152)
{code}


According to the doc of javax.el.ExpressionFactorym 
(http://docs.oracle.com/javaee/6/api/javax/el/ExpressionFactory.html):

{code:java}
Creates a new instance of a ExpressionFactory?. This method uses the following 
ordered lookup procedure to determine the ExpressionFactory? implementation 
class to load: 
•Use the Services API (as detailed in the JAR specification). If a resource 
with the name of META-INF/services/javax.el.ExpressionFactory? exists, then its 
first line, if present, is used as the UTF-8 encoded name of the implementation 
class. 
•Use the properties file "lib/el.properties" in the JRE directory. If this file 
exists and it is readable by the java.util.Properties.load(InputStream?) 
method, and it contains an entry whose key is "javax.el.ExpressionFactory?", 
then the value of that entry is used as the name of the implementation class. 
•Use the javax.el.ExpressionFactory? system property. If a system property with 
this name is defined, then its value is used as the name of the implementation 
class. 
•Use a platform default implementation. 

{code}

I added an el.properties in ${jre_home}/lib/, the el.properties has one line:

{code:java}
javax.el.ExpressionFactory=org.apache.el.ExpressionFactoryImpl
{code}

Restarting OFBiz, the error messages are still there, so there is at least a 
META-INF/services/javax.el.ExpressionFactory in runtime jars. It comes to 
'de.odysseus.juel:juel-spi:2.2.7', unzip it, it only contains a 
javax.el.ExpressionFactory file with de.odysseus.el.ExpressionFactoryImpl.

Remove runtime 'de.odysseus.juel:juel-spi:2.2.7' and restart OFBiz, the error 
messages are still there. Unzip 'de.odysseus.juel:juel-impl:2.2.7', an 
OSGI-INF/services.xml found:

{code:java}
<?xml version="1.0" encoding="UTF-8"?>
<root xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0";>
        <scr:component name="de.odysseus.el.ExpressionFactoryImpl">
                <implementation class="de.odysseus.el.ExpressionFactoryImpl"/>
                <service>
                        <provide interface="javax.el.ExpressionFactory"/>
                </service>
        </scr:component>
</root>
{code}

It's easy to get it defines javax.el.ExpressionFactory implemented by 
de.odysseus.el.ExpressionFactoryImpl. Unzip it and create a new jar with 
command:

{code:java}
jar cf juel-impl-no-osgi-2.2.7.jar de/ META-INF/
{code}

Put the juel-impl-no-osgi-2.2.7.jar under ${ofbiz.home}/lib/, change the 
build.gradle:
{code:java}
// compile 'de.odysseus.juel:juel-impl:2.2.7'
compile files('./lib/juel-impl-no-osgi-2.2.7.jar')
{code}

Restart OFBiz, both OFBiz pages and EL pages are ok now.

Stop OFBiz, remove ${jre_home}/lib/el.properties, start OFBiz, EL pages fail. 
Obviously, this fail is caused by no javax.el.ExpressionFactory defined. Add a 
META-INF/javax.el.ExpressionFactory with one line content of 
org.apache.el.ExpressionFactoryImpl in juel-impl-no-osgi-2.2.7.jar.

Restart OFBiz, all OFBiz and EL pages are right.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to