2017-01-18 5 views
1

私はスプリングウェブフローを設定したspring(4)mvcアプリケーションを持っています。フローURL(/ context/pizza/buy)を押すと、この例外が発生します。完全な例外トレース入れ子になった例外はjava.lang.NoClassDefFoundErrorです:org/springframework/web/context/request/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の設定:

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の構成:

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(); 
} 

} 

春のWebフローの設定:

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; 
} 

} 

定義されたフロー・ディレクトリhierarchi ES:

enter image description here

編集:の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

アプリケーションにmavenを使用しましたか?はいの場合は、pom.xmlを追加してください。そうでない場合は、アプリケーションで使用したjarファイルを確認してください。 – asg

+0

はい、編集: –

答えて

1

問題は、ばねweb.jarであると思われる - それは解決なっていますか。 spring-webflow-2.4.4-Release.jarの推移的な依存として解決されています。 4.3.0.Release(画像の右側):(。添付ファイルの左側を参照してください)

enter image description here

を、解決の依存関係は、ばねウェブです。そして、この瓶にはあなたが例外を受けているクラスは含まれていません。あなたはhereからjarをダウンロードして調べることができます。

次のように直接的な依存関係を追加し、この問題を解決するには、次の

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

これは、ばねのWebflowによって追加推移依存関係をオーバーライドします。私はこれをローカルで試していませんが、これはあなたの問題を解決するはずです。

+0

を参照してください。ありがとう@asg。あなたは素晴らしいです。 :D –

+0

ありがとう@Mujahidulイスラム! – asg

関連する問題