当我尝试运行一个简单的测试war文件作为WSO2 Application Server版本5.3.0的ROOT上下文时,我收到以下错误:

[2016-03-19 17:24:00,177] ERROR - servlet [jsp]的Servlet.service()在路径[/]的上下文中引发异常[无法编译类具有根本原因的JSP] java.lang.IllegalArgumentException:org.apache.jasper.compiler.Compiler.compile(Compiler.java:377)中的java.io.File.setLastModified(File.java:1421)的负时间位于org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java)的org.apache.jasper.compiler.Compiler.compile(Compiler.java:341)中的.apache.jasper.compiler.Compiler.compile(Compiler.java:354) :657)org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:357)位于org.apache.jasper.servlet的org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395) . JspServlet.service(JspServlet.java:339)在javax.servlet.http.HttpServlet.service(HttpServlet.java:727)在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)在org.apache . 猫alina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)在org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain . java:241)org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)at org.apache.catalina.core .StandardContextValve.invoke(StandardContextValve.java:122)在org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)在org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)在org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)在org.wso2.carbon.statistics.webapp.RequestIntercepterValve.invoke(RequestIntercepterValve.java:47)在org.wso2.carbon.bam.webapp . org中的stat.publisher.WebAppStatisticPublisherValve.invoke(WebAppStatisticPublisherValve.java:104) . 在org.wso2.carbon的org.wso2.carbon.tomcat.ext.valves.CarbonTomcatValve $ 1.invoke(CarbonTomcatValve.java:47)的wso2.carbon.tomcat.ext.valves.CompositeValve.continueInvocation(CompositeValve.java:99) .webapp.mgt.TenantLazyLoaderValve.invoke(TenantLazyLoaderValve.java:57)在org.wso2.carbon.tomcat.ext.valves.TomcatValveContainer.invokeValves(TomcatValveContainer.java:47)在org.wso2.carbon.tomcat.ext.valves .CompositeValve.invoke(CompositeValve.java:62)在org.wso2.carbon.tomcat.ext.valves.CarbonStuckThreadDetectionValve.invoke(CarbonStuckThreadDetectionValve.java:159)在org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java :950)在org.apache的org.apache上,org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)的org.wso2.carbon.tomcat.ext.valves.CarbonContextCreatorValve.invoke(CarbonContextCreatorValve.java:57) . catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor) .java:1074)org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:611)org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.doRun(NioEndpoint.java:1739)at org . apache.tomcat.util.net.NioEndpoint $ SocketProcessor.run(NioEndpoint.java:1698)java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)at java.util.concurrent.ThreadPoolExecutor $ Worker.run( ThreadPoolExecutor.java:615)atg.apache.tomcat.util.threads.TaskThread $ WrappingRunnable.run(TaskThread.java:61)at java.lang.Thread.run(Thread.java:745)

如果我运行与任何其他上下文路径相同的应用程序, / testurl它完美地运作 . 那么只有在尝试将其作为ROOT运行时,可能导致上述负时间错误的原因是什么?

PS:以root身份运行我的应用程序我做了两件事:

  • 将所有其他应用程序移出webapps目录,并将我的战争重命名为ROOT.war

  • 在./repository/conf/carbon.xml中我将WebContextRoot设置为 <WebContextRoot>/carbon</WebContextRoot> 所以现在默认的碳管理应用程序在/ carbon路径上可用 . (顺便说一下 . )

此测试应用程序只有一个index.jsp文件,其中包含以下内容:

<%@ 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 import="java.util.*"%>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Test headers</title>
</head>
<body>
<%
    out.println("request.getServerName()="+request.getServerName()+"</br>");
    String[] serverurl= request.getServerName().split("\\.");   
    String clientcode=serverurl[0];
    out.println("clientcode="+clientcode+"</br>");

    Enumeration headerNames = request.getHeaderNames();
    while (headerNames.hasMoreElements()) {
        String key = (String) headerNames.nextElement();
        String value = request.getHeader(key);
        out.println(key+"="+value+"</br>");
    }
%>
</body>
</html>

我见过这个Negative time from JSP compiler,并不适用于我的情况 . 没有在我的测试战争的路径中的任何地方的空格,句号或连字符 . 它可能是由 trailing slash in application context 造成的,但如果是,我无法弄清楚是什么原因造成的 .

如何解决这个负时间问题?