2017-01-18 1 views
1

Ich habe eine Feder (4) mvc app, wo ich eine Feder Web-Flow konfiguriert. Wenn ich die Fluss-URL treffe (/ context/pizza/buy), bekomme ich diese Ausnahme. Vollständige Ausnahme Spurverschachtelte Ausnahme ist java.lang.NoClassDefFoundError: org/springframework/web/kontext/anfrage/async/AsyncRequestTimeoutException

SEVERE: Servlet.service() for servlet [dispatcher] in context with path [/SpringWeb] threw exception [Handler processing failed; nested exception is java.lang.NoClassDefFoundError: org/springframework/web/context/request/async/AsyncRequestTimeoutException] with root cause 
java.lang.ClassNotFoundException: org.springframework.web.context.request.async.AsyncRequestTimeoutException 
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1333) 
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1167) 
at org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver.doResolveException(DefaultHandlerExceptionResolver.java:163) 
at org.springframework.web.servlet.handler.AbstractHandlerExceptionResolver.resolveException(AbstractHandlerExceptionResolver.java:136) 
at org.springframework.web.servlet.handler.HandlerExceptionResolverComposite.resolveException(HandlerExceptionResolverComposite.java:74) 
at org.springframework.web.servlet.DispatcherServlet.processHandlerException(DispatcherServlet.java:1193) 
at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1030) 
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:980) 
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897) 
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) 
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:622) 
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) 
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) 
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528) 
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1100) 
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:687) 
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520) 
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
at java.lang.Thread.run(Thread.java:745) 

DispatcherServlet Konfiguration:

package spittr.config.flow; 

import java.util.Arrays; 

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean; 
import org.springframework.web.servlet.ViewResolver; 
import org.springframework.webflow.config.AbstractFlowConfiguration; 
import org.springframework.webflow.definition.registry.FlowDefinitionRegistry; 
import org.springframework.webflow.engine.builder.support.FlowBuilderServices; 
import org.springframework.webflow.executor.FlowExecutor; 
import org.springframework.webflow.mvc.builder.MvcViewFactoryCreator; 


import spittr.config.WebConfig; 

@Configuration 
public class WebFlowConfig extends AbstractFlowConfiguration{ 

@Autowired 
private WebConfig webConfig; 

@Bean 
public FlowExecutor flowExecutor() { 
    return getFlowExecutorBuilder(flowRegistry()) 
      .build(); 
} 

@Bean 
public FlowDefinitionRegistry flowRegistry() { 
    return getFlowDefinitionRegistryBuilder(flowBuilderServices()) 
      .setBasePath("/WEB-INF/flows") 
      .addFlowLocationPattern("/**/*-flow.xml").build(); 
} 

@Bean 
public FlowBuilderServices flowBuilderServices() { 
    return getFlowBuilderServicesBuilder() 
      .setViewFactoryCreator(mvcViewFactoryCreator()) 
      .setDevelopmentMode(true) 
      .build(); 
} 

@Bean 
public MvcViewFactoryCreator mvcViewFactoryCreator() { 
    MvcViewFactoryCreator factoryCreator = new MvcViewFactoryCreator(); 
    factoryCreator.setViewResolvers(Arrays.<ViewResolver>asList(this.webConfig.viewResolver())); 
    factoryCreator.setUseSpringBeanBinding(true); 
    return factoryCreator; 
} 
} 


public class SpittrWebAppInitializer extends 
    AbstractAnnotationConfigDispatcherServletInitializer { 

@Override 
protected Class<?>[] getRootConfigClasses() { 

    return new Class<?>[] { RootConfig.class, WebConfig.class, WebFlowConfig.class }; 
} 

@Override 
protected Class<?>[] getServletConfigClasses() { 

    return new Class<?>[] { }; 
} 

@Override 
protected String[] getServletMappings() { 

    return new String[] {"/"}; 
} 

@Override 
protected void customizeRegistration(ServletRegistration.Dynamic registration) { 

    registration.setMultipartConfig(new MultipartConfigElement("/tmp/spittr/uploads")); 
} 
} 

Spring MVC-Konfiguration:

package spittr.config; 

import java.io.IOException; 
import java.util.LinkedList; 

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.ComponentScan; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.web.multipart.MultipartResolver; 
import org.springframework.web.multipart.support.StandardServletMultipartResolver; 
import org.springframework.web.servlet.ViewResolver; 
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer; 
import org.springframework.web.servlet.config.annotation.EnableWebMvc; 
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; 
import org.springframework.web.servlet.view.tiles3.TilesConfigurer; 
import org.springframework.web.servlet.view.tiles3.TilesViewResolver; 
import org.springframework.webflow.mvc.servlet.FlowHandlerAdapter; 
import org.springframework.webflow.mvc.servlet.FlowHandlerMapping; 


import spittr.config.flow.PizzaFlowHandler; 
import spittr.config.flow.WebFlowConfig; 

@Configuration 
@EnableWebMvc 
@ComponentScan(basePackages={"spittr.web"}) 
public class WebConfig 
    extends WebMvcConfigurerAdapter { 

@Autowired 
private WebFlowConfig webFlowConfig; 

@Bean 
public FlowHandlerMapping flowHandlerMapping() { 
    FlowHandlerMapping handlerMapping = new FlowHandlerMapping(); 
    handlerMapping.setOrder(-1); 
    handlerMapping.setFlowRegistry(this.webFlowConfig.flowRegistry()); 
    return handlerMapping; 
} 

@Bean 
public FlowHandlerAdapter flowHandlerAdapter() { 
    FlowHandlerAdapter handlerAdapter = new FlowHandlerAdapter(); 
    handlerAdapter.setFlowExecutor(this.webFlowConfig.flowExecutor()); 
    handlerAdapter.setSaveOutputToFlashScopeOnRedirect(true); 
    return handlerAdapter; 
} 

@Bean(name="pizza/buy") 
public PizzaFlowHandler pizzaFlowHandler() { 
    return new PizzaFlowHandler(); 
} 



@Bean 
public TilesConfigurer tilesConfigurer() { 
    TilesConfigurer tiles = new TilesConfigurer(); 
    tiles.setDefinitions(new String[] { 
      "/WEB-INF/layout/tiles.xml" 
    }); 
    tiles.setCheckRefresh(true); 

    return tiles; 
} 

@Bean 
public ViewResolver viewResolver() { 
    return new TilesViewResolver(); 
} 

@Override 
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { 
    configurer.enable(); 
} 


@Bean 
public MultipartResolver multipartResolver() throws IOException { 
    return new StandardServletMultipartResolver(); 
} 

} 

Spring Web Flow-Konfiguration:

package spittr.config.flow; 

import java.util.Arrays; 

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean; 
import org.springframework.web.servlet.ViewResolver; 
import org.springframework.webflow.config.AbstractFlowConfiguration; 
import org.springframework.webflow.definition.registry.FlowDefinitionRegistry; 
import org.springframework.webflow.engine.builder.support.FlowBuilderServices; 
import org.springframework.webflow.executor.FlowExecutor; 
import org.springframework.webflow.mvc.builder.MvcViewFactoryCreator; 


import spittr.config.WebConfig; 

@Configuration 
public class WebFlowConfig extends AbstractFlowConfiguration{ 

@Autowired 
private WebConfig webConfig; 

@Bean 
public FlowExecutor flowExecutor() { 
    return getFlowExecutorBuilder(flowRegistry()) 
      .build(); 
} 

@Bean 
public FlowDefinitionRegistry flowRegistry() { 
    return getFlowDefinitionRegistryBuilder(flowBuilderServices()) 
      .setBasePath("/WEB-INF/flows") 
      .addFlowLocationPattern("/**/*-flow.xml").build(); 
} 

@Bean 
public FlowBuilderServices flowBuilderServices() { 
    return getFlowBuilderServicesBuilder() 
      .setViewFactoryCreator(mvcViewFactoryCreator()) 
      .setDevelopmentMode(true) 
      .build(); 
} 

@Bean 
public MvcViewFactoryCreator mvcViewFactoryCreator() { 
    MvcViewFactoryCreator factoryCreator = new MvcViewFactoryCreator(); 
    factoryCreator.setViewResolvers(Arrays.<ViewResolver>asList(this.webConfig.viewResolver())); 
    factoryCreator.setUseSpringBeanBinding(true); 
    return factoryCreator; 
} 

} 

definierte Strömungs Verzeichnis hierarchi es:

enter image description here

Edited: pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.mujahid.home</groupId> 
    <artifactId>SpringWeb</artifactId> 
    <packaging>war</packaging> 
    <version>0.0.1-SNAPSHOT</version> 
    <name>SpringWeb Maven Webapp</name> 
    <url>http://maven.apache.org</url> 
    <properties> 
     <java-version>1.8</java-version> 
     <org.springframework-version>4.3.5.RELEASE</org.springframework-version> 
    </properties> 

    <dependencies> 

    <!-- https://mvnrepository.com/artifact/org.springframework.webflow/spring-webflow --> 
    <dependency> 
     <groupId>org.springframework.webflow</groupId> 
     <artifactId>spring-webflow</artifactId> 
     <version>2.4.4.RELEASE</version> 
    </dependency> 

    <!-- https://mvnrepository.com/artifact/net.sourceforge.nekohtml/nekohtml --> 
    <dependency> 
     <groupId>net.sourceforge.nekohtml</groupId> 
     <artifactId>nekohtml</artifactId> 
     <version>1.9.10</version> 
    </dependency> 

    <!-- https://mvnrepository.com/artifact/org.thymeleaf/thymeleaf --> 
    <dependency> 
     <groupId>org.thymeleaf</groupId> 
     <artifactId>thymeleaf</artifactId> 
     <version>m1</version> 
    </dependency> 

    <!-- https://mvnrepository.com/artifact/org.thymeleaf/thymeleaf-spring3 --> 
    <dependency> 
     <groupId>org.thymeleaf</groupId> 
     <artifactId>thymeleaf-spring3</artifactId> 
     <version>3.0.3.RELEASE</version> 
    </dependency> 

    <!-- https://mvnrepository.com/artifact/org.apache.tiles/tiles-api --> 
    <dependency> 
     <groupId>org.apache.tiles</groupId> 
     <artifactId>tiles-api</artifactId> 
     <version>3.0.4</version> 
    </dependency> 

    <!-- https://mvnrepository.com/artifact/org.apache.tiles/tiles-servlet --> 
    <dependency> 
     <groupId>org.apache.tiles</groupId> 
     <artifactId>tiles-servlet</artifactId> 
     <version>3.0.4</version> 
    </dependency> 
    <!-- https://mvnrepository.com/artifact/org.apache.tiles/tiles-core --> 
    <dependency> 
     <groupId>org.apache.tiles</groupId> 
     <artifactId>tiles-core</artifactId> 
     <version>3.0.4</version> 
    </dependency> 


    <!-- https://mvnrepository.com/artifact/org.apache.tiles/tiles-jsp --> 
    <dependency> 
     <groupId>org.apache.tiles</groupId> 
     <artifactId>tiles-jsp</artifactId> 
     <version>3.0.4</version> 
    </dependency> 

    <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-validator --> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-validator</artifactId> 
     <version>5.2.4.Final</version> 
    </dependency> 

    <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 --> 
    <dependency> 
     <groupId>org.apache.commons</groupId> 
     <artifactId>commons-lang3</artifactId> 
     <version>3.5</version> 
    </dependency> 

    <!-- https://mvnrepository.com/artifact/org.springframework/spring-test --> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-test</artifactId> 
     <version>4.3.5.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>javax.servlet-api</artifactId> 
     <version>3.0.1</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>jstl</artifactId> 
     <version>1.2</version> 
    </dependency> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.11</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-context</artifactId> 
     <version>${org.springframework-version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-webmvc</artifactId> 
     <version>${org.springframework-version}</version> 
    </dependency> 
    </dependencies> 

    <build> 
    <finalName>SpringWeb</finalName> 
    <pluginManagement> 
      <plugins> 
       <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-compiler-plugin</artifactId> 
        <version>2.3.2</version> 
        <configuration> 
         <source>${java-version}</source> 
         <target>${java-version}</target> 
        </configuration> 
       </plugin> 

       <plugin> 
        <groupId>org.apache.tomcat.maven</groupId> 
        <artifactId>tomcat7-maven-plugin</artifactId> 
        <version>2.2</version> 
        <configuration> 
         <url>http://localhost:8080/manager/text</url> 
         <server>TomcatServer</server> 
         <path>/SpringWeb</path> 
        </configuration> 
       </plugin> 
       <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-resources-plugin</artifactId> 
        <version>2.6</version> 
       </plugin> 

      </plugins> 
     </pluginManagement> 
    </build> 
</project> 
+0

Haben Sie Maven für Ihre Anwendung verwendet? Wenn ja, könnten Sie bitte pom.xml hinzufügen .. wenn nicht, würde gerne sehen, welche Gläser Sie in Ihrer Anwendung verwendet haben – asg

+0

ja, siehe Edited: –

Antwort

1

Problem scheint mit dem feder web.jar zu sein - wie es gelöst zu werden. Es wird aufgelöst als transitive Abhängigkeit von spring-webflow-2.4.4-Release.jar. (Bitte beachten Sie die linke Seite der angehängten Datei.)

enter image description here

Und aufgelöste Abhängigkeit feder web: 4.3.0.Release (rechte Seite des Bildes). Und dieses Jar enthält nicht die Klasse, für die Sie eine Ausnahme erhalten. Sie können das Glas von here herunterladen und überprüfen Sie es.

Um dieses Problem zu lösen, fügen Sie direkte Abhängigkeit wie folgt:

<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-web</artifactId> 
    <version>${org.springframework-version}</version> 
</dependency> 

die transitive Abhängigkeit Dies wird außer Kraft gesetzt durch feder Webflow hinzugefügt. Obwohl ich dies lokal nicht versucht habe, sollte dies Ihr Problem lösen.

+0

Es funktioniert. Danke @asg. Du bist toll. : D –

+0

Dank @Mujahidul Islam! – asg

Verwandte Themen