Сервер приложений WSO2 5.0.1 jsp, использующий пакет javax.crypto, не может скомпилировать

Мы используем сервер приложений WSO2 версии 5.0.1. Если я использую пакет javax.crypto на странице JSP, он не компилируется при доступе. Чтобы убедиться в этом, я скопировал файл jce.jar в папку WEB-INF/lib нашего веб-приложения. Если файл jce.jar находится в папке WEB-INF/lib, jsp компилируется нормально, но если я удалю оттуда jce.jar, компиляция завершится с ошибками:

Generated servlet error:
The type javax.activation.DataHandler cannot be resolved. It is indirectly referenced from required .class files

An error occurred at line: 10 in the jsp file: /processPassword.jsp
Generated servlet error:
PBEKeySpec cannot be resolved to a type

An error occurred at line: 10 in the jsp file: /processPassword.jsp
Generated servlet error:
SecretKeyFactory cannot be resolved to a type

An error occurred at line: 10 in the jsp file: /processPassword.jsp
Generated servlet error:
SecretKeyFactory cannot be resolved

] with root cause
org.apache.jasper.JasperException: Unable to compile class for JSP

Generated servlet error:
The type javax.activation.DataHandler cannot be resolved. It is indirectly referenced from required .class files

An error occurred at line: 10 in the jsp file: /processPassword.jsp
Generated servlet error:
PBEKeySpec cannot be resolved to a type

An error occurred at line: 10 in the jsp file: /processPassword.jsp
Generated servlet error:
SecretKeyFactory cannot be resolved to a type

An error occurred at line: 10 in the jsp file: /processPassword.jsp
Generated servlet error:
SecretKeyFactory cannot be resolved


    at org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:84)
    at org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:328)
    at org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:414)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:297)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:276)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:264)
    at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:563)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:303)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at com.isomorphic.servlet.CompressionFilter.doFilter(CompressionFilter.java:260)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:581)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
    at org.wso2.carbon.tomcat.ext.valves.CompositeValve.invoke(CompositeValve.java:172)
    at org.wso2.carbon.tomcat.ext.valves.CarbonContextCreatorValve.invoke(CarbonContextCreatorValve.java:52)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1001)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:579)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1653)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1146)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:701)

Интересно, что может быть причиной этих ошибок компиляции и как их избежать, не помещая файл jce.jar в WEB-INF/lib

Если я использую пакет javax.crypto в сервлете, он компилируется и работает нормально. Что приводит меня к мысли, что существует проблема с classpath при компиляции jsp на сервере приложений WSO2 версии 5.0.1.

Какие-либо предложения?

2 ответа

Это может быть проблема загрузки классов на сервере приложений, но мы исправили ее в версии 5.1.0. Мы представили новый XML-файл с именем webapp-classloading.xml, чтобы избежать проблем с загрузкой классов.

Пожалуйста, обратитесь http://docs.wso2.org/display/AS510/Webapp+ClassLoading

Поскольку jce.jar является частью jre, он должен быть доступен на пути к классам компиляции jsp. Таким образом, он не требует дополнительной загрузки классов, специфичных для веб-приложений, например, через webapp-classloading.xml. Ниже показано начало страницы jsp, которая не компилируется и не запускается в 5.0.1:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ page language="java" import="java.util.*" %>
<%@ page language="java" import="org.apache.axiom.om.util.Base64"%>
<%@ page language="java" import="java.security.SecureRandom"%>
<%@ page language="java" import="java.security.spec.KeySpec"%>
<%@ page language="java" import="javax.crypto.SecretKeyFactory"%>
<%@ page language="java" import="javax.crypto.spec.PBEKeySpec"%>

Можете ли вы подтвердить, что это работает в 5.1.0, не устанавливая определенный путь к классу в веб-приложении?

Другие вопросы по тегам