2017-07-12 41 views
0

我试图将Activiti 6 activiti-app.war文件部署到Weblogic 12,并且在尝试登录登录页时遇到以下异常:Activiti 6 App + Weblogic 12 =“ServletContext不能为空”

java.lang.IllegalArgumentException: ServletContext must not be null 
    at org.springframework.util.Assert.notNull(Assert.java:112) 
    at org.springframework.web.context.support.WebApplicationContextUtils.getWebApplicationContext(WebApplicationContextUtils.java:108) 
    at org.springframework.web.context.support.WebApplicationContextUtils.getWebApplicationContext(WebApplicationContextUtils.java:98) 
    at org.springframework.web.filter.DelegatingFilterProxy.findWebApplicationContext(DelegatingFilterProxy.java:305) 
    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:250) 
    at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79) 
    at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3367) 
    at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3333) 
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321) 
    at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120) 
    at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:57) 
    at weblogic.servlet.internal.WebAppServletContext.doSecuredExecute(WebAppServletContext.java:2220) 
    at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2146) 
    at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2124) 
    at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1564) 
    at weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run(ContainerSupportProviderImpl.java:254) 
    at weblogic.work.ExecuteThread.execute(ExecuteThread.java:295) 
    at weblogic.work.ExecuteThread.run(ExecuteThread.java:254) 

这是我的weblogic.xml文件:

<?xml version="1.0" encoding="UTF-8"?> 
<wls:weblogic-web-app xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-web-app" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.5/weblogic-web-app.xsd"> 
    <wls:weblogic-version>12.1.2</wls:weblogic-version> 
    <wls:container-descriptor> 
     <wls:prefer-application-packages> 
      <wls:package-name>com.google.common.*</wls:package-name> 
      <wls:package-name>org.joda.*</wls:package-name> 
     </wls:prefer-application-packages> 
    </wls:container-descriptor> 
</wls:weblogic-web-app> 

不知道如何解决这个问题

+0

你尝试添加Web的Spring上下文监听器.XML? –

+0

Activiti正在使用一个扩展名为WebConfigurer的spring上下文侦听器,当试图添加spring侦听器时,我得到一个错误,说我有多个侦听器,只允许一个侦听器 – adevedo

+0

这看起来像是一个类加载问题。你在共享库或类似的东西里有没有弹簧库? –

回答

0

提供在WebConfigurer的Servlet下,在构造函数中的DelegatingFilterProxy的webservletcontext对象ontext Listener为我工作。在initSpringSecurity方法

现有的代码片段就像下面

FilterRegistration.Dynamic springSecurityFilter = servletContext.addFilter("springSecurityFilterChain", new DelegatingFilterProxy()); 

它修改addFilter呼叫像下面后的工作:

WebApplicationContext webAppContext = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext); 

FilterRegistration.Dynamic springSecurityFilter = servletContext.addFilter("springSecurityFilterChain", new DelegatingFilterProxy("springSecurityFilterChain",webAppContext)); 
0

如果你得到错误

没有的WebApplicationContext发现:没有ContextLoaderListener注册?

调用方法时WebApplicationContextUtils.getRequiredWebApplicationContext,尝试实例化这样的WebContext:

AnnotationConfigWebApplicationContext webAppContext = new AnnotationConfigWebApplicationContext(); 
     webAppContext.register(ResourceWebConfig.class); 

其中ResourceWebConfig类:

@Configuration 
@EnableWebMvc 
public class ResourceWebConfig extends WebMvcConfigurerAdapter { 
}