You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ofbiz.apache.org by "Shi Jinghai (JIRA)" <ji...@apache.org> on 2017/07/10 01:38:00 UTC

[jira] [Created] (OFBIZ-9483) Enable EL in OFBiz

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)