Websphere 7 (и Spring Roo) несовместимы с javax.el.ELException - PullRequest
4 голосов
/ 13 апреля 2011

У меня есть приложение, в котором интерфейс основан на jspx-файлах Spring Roo 1.1.2.

Все идеи прекрасно работают в Tomcat 6, но если я разверну такое же приложение в Websphere 7 (загрузчик классов: родительский последний), я получу исключение:

java.lang.ClassCastException: java.lang.NullPointerException несовместимо с 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

Приложение имеет часть Flex / BlazeDS, которая отлично работает. Но есть и эта часть JSP (x). Контроллеры Spring работают, но что-то не так с JSPX, и я понятия не имею, с чего начать , когда я правильно понял спецификацию, чем WAS7 предоставляет JSP 2.1, это именно то, что мне нужно.

Соответствующая часть POM для 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>

Кто-нибудь может дать мне подсказку?

Это дерево зависимостей maven:

[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 ]

10 голосов
/ 14 апреля 2011

4 шага для создания сгенерированного Roo JSPX на Websphere 7

или как я провожу последние два дня


Проблема в том, что сгенерированные Roo (1.1.2) файлы JSPX не совместимы с IBM Webshpere. Так что это не проблема библиотек.

Чтобы запустить шаблоны Roo, вам нужно сделать следующее:

  • Первая проблема (которая вызывает исключение java.lang.ClassCastException: java.lang.NullPointerException incompatible with javax.el.ELException, заключается в следующей строке <util:load-scripts /> в WEB-INF / layout / default.jspx. Я абсолютно не знаю, почему, потому что все остальные теги работают ( I потратить весь мой вечер ). Самым простым способом работы является «включение» соответствующего содержимого /WEB-INF/tags/util/load-scripts.tagx вручную в default.jspx (затем вы можете удалить нагрузки scripts.tagx)

  • Произойдет новая ошибка валидации: это связано с тем, что IBM считает, что возникли проблемы с анализом функций jstl в '. Например: ${fn:toLowerCase(userLocale)}. И это точно одна из строк, скопированных с load-scripts.tagx до default.jspx на шаге 1. Мой обходной путь: заменить:

    <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>
  • Теперь вы увидите что-то, но я посмотрю на вывод, вы увидите, что IBM Websphere 7 не удаляет определения пространств имен из divs. Но в шаблоне у вас будет много этих <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">. Поэтому вам нужно извлечь их все в <jsp:root элементы (во всех файлах jspx). Чтобы файлы выглядели так:

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

    Я не уверен на 100%, нужен ли этот шаг, но вам нужен следующий.

  • Теперь все работает, кроме скриптов Java. Это потому, что IBM Websphere 7, нормализует вывод JSPX. Вот такие строки:

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

    становятся <script src="${spring_dojo_url}" type="text/javascript" /> к сожалению, IE и Firefox (3) игнорируют теги этого скрипта. Обходной путь должен поместить <jsp:text> </jsp:text> в часть сценария всех (3) соответствующих тегов сценария, скопированных в шаге 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>
    

По крайней мере ваш default.jspx выглядит так:

<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's 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>
1 голос
/ 20 мая 2013

png файлы не поддерживаются по умолчанию в WebSphere 7;эта ссылка показывает, что вам просто нужно добавить новый тип MIME, и это сработало для меня.http://pic.dhe.ibm.com/infocenter/mpadoc/v7r0m0/index.jsp?topic=%2Fcom.ibm.websphere.wemp.doc%2Fconfiguring%2Fconfiguringwastoacceptmimetypes.html

Вы можете настроить WebSphere Application Server для поддержки типа PNG MIME.

Если вы используете WebSphere Application Server, выполните следующие действия, чтобы настроить WebSphere Application Server для поддержки PNG MIME.type.

Процедура

1.Войдите в консоль интегрированных решений WebSphere® Application Server.

2.Разверните среды> Виртуальные хосты.

3.Нажмите default_host.

4.Нажмите Дополнительные свойства> Типы MIME.

5.Нажмите Новый.

6.Введите image / png в качестве значения для поля MIME Type.

7.Введите png в качестве значения для поля Extension.

8.Нажмите ОК, чтобы сохранить новый тип MIME.

9. Сохраните изменения конфигурации.

1 голос
/ 03 января 2012

Также вам нужно использовать js comments //, чтобы убедиться, что панели работают с Websphere7 должным образом, иначе вы не увидите складные панели.

Преобразуйте последние строки файла ниже, как показано ниже: (Возможно, вам понадобитсячтобы редактировать файлы jsp, используя это поле, чтобы избежать выполнения кэшированной / скомпилированной версии)

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 нет встроенной поддержки файлов png, и они не будут отображаться, если выпреобразуйте их в jpg и отредактируйте теги, чтобы использовать jpg вместо файлов png, или вы можете установить дополнение для поддержки png в Websphere 7

РЕДАКТИРОВАТЬ: Добавление ниже в web.xml также может решить проблему

<mime-mapping>
  <extension>png</extension>
  <mime-type>image/png</mime-type> 
</mime-mapping>
...