Websphere 7 (and Spring Roo) is incompatible with javax.el.ELException

I have an application in which the interface is based on Spring Roo 1.1.2 jspx files.

Everyone thinks it works well in Tomcat 6, but if I deploy the same application in Websphere 7 (class loader: parent last), I get an exception:

java.lang.ClassCastException: java.lang.NullPointerException is incompatible with javax.el.ELException

[13.04.11 09:53:55:493 UTC] 00000026 servlet E com.ibm.ws.webcontainer.servlet.ServletWrapper service SRVE0068E: Uncaught exception created in one of the service methods of the servlet /WEB-INF/layouts/default.jspx in application cyber. Exception created : com.ibm.websphere.servlet.error.ServletErrorReport: java.lang.ClassCastException: java.lang.NullPointerException incompatible with javax.el.ELException at org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:693) at com.ibm._jsp._default_5F_jspx._jspService(_default_5F_jspx.java:123) at com.ibm.ws.jsp.runtime.HttpJspBase.service(HttpJspBase.java:98) at javax.servlet.http.HttpServlet.service(HttpServlet.java:831) at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1655) at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1595) at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:104) at com.ibm.ws.webcontainer.filter.WebAppFilterChain._doFilter(WebAppFilterChain.java:77) at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:895) at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:932) at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:500) at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:178) at com.ibm.wsspi.webcontainer.servlet.GenericServletWrapper.handleRequest(GenericServletWrapper.java:121) at com.ibm.ws.jsp.webcontainerext.AbstractJSPExtensionServletWrapper.handleRequest(AbstractJSPExtensionServletWrapper.java:239) at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:341) at org.apache.tiles.servlet.context.ServletTilesRequestContext.forward(ServletTilesRequestContext.java:241) ... Caused by: java.lang.ClassCastException: java.lang.NullPointerException incompatible with javax.el.ELException at org.apache.el.lang.ExpressionBuilder.prepare(ExpressionBuilder.java:139) at org.apache.el.lang.ExpressionBuilder.build(ExpressionBuilder.java:151) at org.apache.el.lang.ExpressionBuilder.createValueExpression(ExpressionBuilder.java:194) at org.apache.el.ExpressionFactoryImpl.createValueExpression(ExpressionFactoryImpl.java:67) at org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:773) at com.ibm.ws.jsp.tagfile.webinf.util._load_2D_scripts.doTag(_load_2D_scripts.java:74) at com.ibm._jsp._default_5F_jspx._jspx_meth_util_load$1scripts_0(_default_5F_jspx.java:140) at com.ibm._jsp._default_5F_jspx._jspService(_default_5F_jspx.java:94) ... 88 more 

The app has a Flex / BlazeDS part that works great. But there is this part of JSP (x). Spring controllers work, but something is wrong with JSPX, and I don’t know where to start when I understand the specification right, than WAS7 provides JSP 2.1, this is exactly what I need.

The corresponding POM part for WAR:

 <dependency> <groupId>javax.servlet</groupId> <artifactId>com.springsource.javax.servlet.jsp.jstl</artifactId> <version>1.2.0</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.1</version> <scope>provided</scope> </dependency> 

Can someone give me a hint?

This is the maven dependency tree:

 [INFO] +- cyber:cyber-core:jar:4.0.0.0-D1-SNAPSHOT:compile [INFO] | +- javax.validation:com.springsource.javax.validation:jar:1.0.0.GA:compile [INFO] | +- javax.transaction:com.springsource.javax.transaction:jar:1.1.0:compile [INFO] | +- org.apache.poi:poi:jar:3.6:compile [INFO] | +- net.sf.jxls:jxls-core:jar:0.9.9:compile [INFO] | | +- commons-beanutils:commons-beanutils:jar:1.8.2:compile [INFO] | | \- commons-jexl:commons-jexl:jar:1.1:compile [INFO] | | \- junit:junit:jar:3.8.1:compile [INFO] | +- net.sf.jxls:jxls-reader:jar:0.9.9:compile [INFO] | +- org.apache.commons:com.springsource.org.apache.commons.dbcp:jar:1.2.2.osgi:compile [INFO] | | \- org.apache.commons:com.springsource.org.apache.commons.pool:jar:1.3.0:compile [INFO] | +- commons-io:commons-io:jar:1.4:compile [INFO] | +- org.apache.commons:com.springsource.org.apache.commons.collections:jar:3.2.1:compile [INFO] | +- commons-lang:commons-lang:jar:2.4:compile [INFO] | +- commons-math:commons-math:jar:1.2:compile [INFO] | +- jdom:jdom:jar:1.0:compile [INFO] +- org.springframework:org.springframework.core:jar:3.0.5.RELEASE:compile [INFO] +- org.springframework:org.springframework.beans:jar:3.0.5.RELEASE:compile [INFO] | \- org.springframework:org.springframework.asm:jar:3.0.5.RELEASE:compile [INFO] +- org.springframework:org.springframework.context:jar:3.0.5.RELEASE:compile [INFO] | \- org.springframework:org.springframework.expression:jar:3.0.5.RELEASE:compile [INFO] +- org.springframework:org.springframework.web:jar:3.0.5.RELEASE:compile [INFO] | \- org.aopalliance:com.springsource.org.aopalliance:jar:1.0.0:compile [INFO] +- org.springframework:org.springframework.web.servlet:jar:3.0.5.RELEASE:compile [INFO] +- org.springframework:org.springframework.aop:jar:3.0.5.RELEASE:compile [INFO] +- org.springframework:org.springframework.aspects:jar:3.0.5.RELEASE:compile [INFO] +- org.springframework:org.springframework.orm:jar:3.0.5.RELEASE:compile [INFO] | +- org.springframework:org.springframework.jdbc:jar:3.0.5.RELEASE:compile [INFO] | \- org.springframework:org.springframework.transaction:jar:3.0.5.RELEASE:compile [INFO] +- org.springframework:org.springframework.context.support:jar:3.0.5.RELEASE:compile [INFO] +- org.springframework:spring-webmvc:jar:3.0.5.RELEASE:compile [INFO] | +- org.springframework:spring-asm:jar:3.0.5.RELEASE:compile [INFO] | +- org.springframework:spring-beans:jar:3.0.5.RELEASE:compile [INFO] | +- org.springframework:spring-context:jar:3.0.5.RELEASE:compile [INFO] | | \- org.springframework:spring-aop:jar:3.0.5.RELEASE:compile [INFO] | +- org.springframework:spring-context-support:jar:3.0.5.RELEASE:compile [INFO] | +- org.springframework:spring-core:jar:3.0.5.RELEASE:compile [INFO] | +- org.springframework:spring-expression:jar:3.0.5.RELEASE:compile [INFO] | \- org.springframework:spring-web:jar:3.0.5.RELEASE:compile [INFO] | \- aopalliance:aopalliance:jar:1.0:compile [INFO] +- org.springframework.webflow:spring-js-resources:jar:2.2.1.RELEASE:compile [INFO] +- org.springframework.security:org.springframework.security.core:jar:3.0.3.RELEASE:compile [INFO] | \- org.apache.commons:com.springsource.org.apache.commons.logging:jar:1.1.1:compile [INFO] +- org.springframework.security:org.springframework.security.web:jar:3.0.3.RELEASE:compile [INFO] +- org.springframework.security:org.springframework.security.config:jar:3.0.3.RELEASE:compile [INFO] +- org.apache.tiles:tiles-core:jar:2.2.1:compile [INFO] | +- org.apache.tiles:tiles-api:jar:2.2.1:compile [INFO] | +- commons-digester:commons-digester:jar:2.0:compile [INFO] | \- org.slf4j:jcl-over-slf4j:jar:1.5.10:compile [INFO] +- org.apache.tiles:tiles-jsp:jar:2.2.1:compile [INFO] | +- org.apache.tiles:tiles-servlet:jar:2.2.1:compile [INFO] | \- org.apache.tiles:tiles-template:jar:2.2.1:compile [INFO] +- org.tuckey:urlrewritefilter:jar:3.1.0:compile [INFO] +- org.springframework:spring-oxm:jar:3.0.5.RELEASE:compile [INFO] +- javax.servlet:com.springsource.javax.servlet.jsp.jstl:jar:1.2.0:compile [INFO] | \- org.apache.taglibs:com.springsource.org.apache.taglibs.standard:jar:1.1.2:compile [INFO] +- javax.servlet:servlet-api:jar:2.5:provided [INFO] +- javax.servlet.jsp:jsp-api:jar:2.1:provided [INFO] +- org.aspectj:aspectjweaver:jar:1.6.9:compile [INFO] +- org.aspectj:aspectjrt:jar:1.6.9:compile 
+3
source share
3 answers

4 steps to create RSP-created JSPX on Websphere 7

or how I spent the last two days


The problem is that the JOSS Roo (1.1.2) files created are not compatible with IBM Webshpere. So this is not a libaries problem.

To run Roo templates, you need to do this:

  • The first problem (which raises java.lang.ClassCastException: java.lang.NullPointerException incompatible with javax.el.ELException Exception is the line <util:load-scripts /> in WEB-INF / layout / default.jspx. I absolutely don't understand , why, because all other tags work (I spend all my evening time). The easiest desktop is to "enable" the corresponding content / WEB -INF / tags / util / load-scripts.tagx directly manually in default.jspx. ( Then you can remove load-scripts.tagx)

  • A new validation error occurs: this is because IBM is sewing problems to parse jstl functions in ' . For example: ${fn:toLowerCase(userLocale)} . And this is one of the lines copied from load-scripts.tagx to default.jspx in step 1. My desktop: replace:

     <script type="text/javascript">var djConfig = {parseOnLoad: false, isDebug: false, locale: '${fn:toLowerCase(userLocale)}'};</script> 

:

  <c:set var="userLocalLowerCase" value="${fn:toLowerCase(userLocale)}" /> <script type="text/javascript">var djConfig = {parseOnLoad: false, isDebug: false, locale: '${userLocalLowerCase}'};</script> 
  • Now you will see something, but I will look, at the exit, you will see that IBM Websphere 7 does not delete the namespace section form. But in the template you will have a lot of this <div xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:fn="http://java.sun.com/jsp/jstl/functions" xmlns:jsp="http://java.sun.com/JSP/Page" xmlns:spring="http://www.springframework.org/tags" version="2.0"> So, you need to extract everything of them in <jsp:root elements (in all jspx files). To make the files look like this:

     <jsp:root xmlns:c="http://java.sun.com/jsp/jstl/core" ... version="2.0"> <div> ... </div> </jsp:root> 

    I am not 100% sure if this step is needed, but you need the next one.

  • Now everything works, except for Java scripts. This is because IBM Websphere 7, normalize JSPX output. So these lines:

     <script src="${spring_dojo_url}" type="text/javascript"><!-- required for FF3 and Opera --></script> 

    Becoming <script src="${spring_dojo_url}" type="text/javascript" /> , unfortunately IE and Firefox (3) ignore script tags. The workaround is to put <jsp:text> </jsp:text> in the script part of all (3) the corresponding script tags copied in step 1.

     <script src="${dojo_url}" type="text/javascript"><!-- required for FF3 and Opera --><jsp:text> </jsp:text></script> <script src="${spring_url}" type="text/javascript"><!-- /required for FF3 and Opera --><jsp:text> </jsp:text></script> <script src="${spring_dojo_url}" type="text/javascript"><!-- required for FF3 and Opera --><jsp:text> </jsp:text></script> 

At least your default.jspx looks like this:

 <jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" xmlns:fn="http://java.sun.com/jsp/jstl/functions" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:tiles="http://tiles.apache.org/tags-tiles" xmlns:spring="http://www.springframework.org/tags" xmlns:util="urn:jsptagdir:/WEB-INF/tags/util" version="2.0"> <html> <jsp:output doctype-root-element="HTML" doctype-system="-//W3C//DTD HTML 4.01//EN" doctype-public="http://www.w3.org/TR/html4/strict.dtd"/> <jsp:directive.page contentType="text/html;charset=UTF-8" /> <jsp:directive.page pageEncoding="UTF-8" /> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=8" /> <spring:url value="/resources/styles/standard.css" var="roo_css_url" /> <spring:url value="/resources/dojo/dojo.js" var="dojo_url" /> <spring:url value="/resources/dijit/themes/tundra/tundra.css" var="tundra_url" /> <spring:url value="/resources/spring/Spring.js" var="spring_url" /> <spring:url value="/resources/spring/Spring-Dojo.js" var="spring_dojo_url" /> <spring:url value="/resources/images/favicon.ico" var="favicon" /> <link rel="stylesheet" type="text/css" media="screen" href="${roo_css_url}"><!-- required for FF3 and Opera --></link> <link rel="stylesheet" type="text/css" href="${tundra_url}"><!-- required for FF3 and Opera --></link> <link rel="SHORTCUT ICON" href="${favicon}" /> <!-- Get the user local from the page context (it was set by Spring MVC locale resolver) --> <c:set var="userLocale"> <c:out value="${pageContext.response.locale}" default="en" /> </c:set> <c:set var="userLocalLowerCase" value="${fn:toLowerCase(userLocale)}" /> <script type="text/javascript">var djConfig = {parseOnLoad: false, isDebug: false, locale: '${userLocalLowerCase}'};</script> <script src="${dojo_url}" type="text/javascript"><!-- required for FF3 and Opera --><jsp:text> </jsp:text></script> <script src="${spring_url}" type="text/javascript"><!-- /required for FF3 and Opera --><jsp:text> </jsp:text></script> <script src="${spring_dojo_url}" type="text/javascript"><!-- required for FF3 and Opera --><jsp:text> </jsp:text></script> <script language="JavaScript" type="text/javascript">dojo.require("dojo.parser");</script> <spring:message code="application_name" var="app_name"/> <title><spring:message code="welcome_h3" arguments="${app_name}" /></title> </head> <body class="tundra spring"> <div id="wrapper"> <tiles:insertAttribute name="header" ignore="true" /> <tiles:insertAttribute name="menu" ignore="true" /> <div id="main"> <tiles:insertAttribute name="body"/> <tiles:insertAttribute name="footer" ignore="true"/> </div> </div> </body> </html> </jsp:root> 
+9
source

You also need to use js comments // to make sure that the panels work with Websphere7 correctly, otherwise you will not see folding panels.

Convert the following lines below, as shown below: (You may need to edit jsp files with this file to avoid the cached / compiled version)

 load-scripts.tagx <script src="${dojo_url}" type="text/javascript">//<!-- required for FF3 and Opera --></script> <script src="${spring_url}" type="text/javascript">//<!-- /required for FF3 and Opera --></script> <script src="${spring_dojo_url}" type="text/javascript">//<!-- required for FF3 and Opera --></script> <script language="JavaScript" type="text/javascript">dojo.require("dojo.parser");</script> 

Websphere 7 also does not have built-in support for png files, and they will not be displayed if you do not convert them to jpg and edit tags to use jpg instead of png files, or you can install the add-on to support png Websphere 7

EDIT: Adding below to web.xml may also solve the problem.

 <mime-mapping> <extension>png</extension> <mime-type>image/png</mime-type> </mime-mapping> 
+1
source

PNG files are not supported by default in WebSphere 7; these links show that you just need to add a new MIME type, and it worked for me. http://pic.dhe.ibm.com/infocenter/mpadoc/v7r0m0/index.jsp?topic=%2Fcom.ibm.websphere.wemp.doc%2Fconfiguring%2Fconfiguringwastoacceptmimetypes.html

You can configure WebSphere Application Server to support PNG MIME type.

If you are using WebSphere Application Server, follow these steps to configure WebSphere Application Server to support PNG MIME type.

Procedure

1. Log in to the WebSphere® Application Server integrated solutions console.

2.Extended environments> Virtual hosts.

3.Click the default_host icon.

4. Click Advanced Properties> MIME Types.

5. Click "New."

6. Enter the image / png as the value for the field of type MIME.

7. Enter the png value as the value for the Extension field.

8. Click OK to save the new MIME type.

9. Save the configuration changes.

+1
source

Source: https://habr.com/ru/post/899698/


All Articles