Liferay 6.2:ClassNotFoundException:启用PACL时的javax.faces.webapp.FacesServlet

时间:2014-06-11 22:18:48

标签: liferay portlet classnotfoundexception securitymanager

我开发了一个portlet应用程序,它在liferay-plugin-package.properties中启用了安全管理器:

security-manager-enabled=true

当应用程序启动时,我们在liferay 6.2 EE和6.2.1 CE日志(Tomcat 7包)中获得下面的堆栈跟踪。它只发生一次并且它不会破坏任何东西,尽管这个消息portlet工作得很好。如果我们在portlet的liferay-plugin-package.properties中禁用安全管理器,则不会发生此异常。这个类" javax.faces.webapp.FacesServlet"不在portlet的.WAR中,并且它没有在代码中使用(至少它不是直接使用,可能是依赖项)。 portlet包含这些门户依赖项,不确定它是否相关:

portal-dependency-jars=jstl-api.jar,jstl-impl.jar

请其他人遇到此问题吗?有什么想法解决它吗?

20:23:06,406 ERROR [localhost-startStop-1][BasePortalLifecycle:94] java.lang.ClassNotFoundException: javax.faces.webapp.FacesServlet
java.lang.ClassNotFoundException: javax.faces.webapp.FacesServlet
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
    at com.liferay.portal.kernel.util.InstanceFactory.newInstance(InstanceFactory.java:52)
    at com.liferay.portal.kernel.util.InstanceFactory.newInstance(InstanceFactory.java:27)
    at com.liferay.portal.kernel.servlet.SecureServlet.doPortalInit(SecureServlet.java:101)
    at com.liferay.portal.kernel.util.BasePortalLifecycle.portalInit(BasePortalLifecycle.java:44)
    at com.liferay.portal.kernel.util.PortalLifecycleUtil.register(PortalLifecycleUtil.java:64)
    at com.liferay.portal.kernel.util.PortalLifecycleUtil.register(PortalLifecycleUtil.java:56)
    at com.liferay.portal.kernel.util.BasePortalLifecycle.registerPortalLifecycle(BasePortalLifecycle.java:54)
    at com.liferay.portal.kernel.servlet.SecureServlet.init(SecureServlet.java:76)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:277)
    at org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:274)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAsPrivileged(Subject.java:536)
    at org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:309)
    at org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:169)
    at org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:123)
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1268)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1193)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1088)
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5176)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5460)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
    at org.apache.catalina.core.ContainerBase.access$000(ContainerBase.java:133)
    at org.apache.catalina.core.ContainerBase$PrivilegedAddChild.run(ContainerBase.java:156)
    at org.apache.catalina.core.ContainerBase$PrivilegedAddChild.run(ContainerBase.java:145)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:875)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633)
    at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1113)
    at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1671)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
    at java.util.concurrent.FutureTask.run(FutureTask.java:166)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:724)

1 个答案:

答案 0 :(得分:1)

看来Maven已经在web.xml中自动生成了这些条目,可能是由于我这边的处理错误:Javax faces只包含在pom.xml中作为测试依赖项,可能是我们做过一次范围错误或其他什么那样的。

删除这些线条后,一切都很完美。谢谢!

 1    <context-param>
 2        <param-name>javax.faces.PROJECT_STAGE</param-name>
 3        <param-value>Development</param-value>
 4    </context-param>
 5    <servlet>
 6        <servlet-name>Faces Servlet</servlet-name>
 7        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
 8        <load-on-startup>1</load-on-startup>
 9    </servlet>
10    <servlet-mapping>
11        <servlet-name>Faces Servlet</servlet-name>
12        <url-pattern>/faces/*</url-pattern>
13    </servlet-mapping>