简体   繁体   English

使用Arquillian测试Spring REST服务-ClassNotFoundException JspServlet

[英]Testing Spring REST services with Arquillian - ClassNotFoundException JspServlet

I am trying to set up a simple Arquillian test for REST service written with Spring. 我正在尝试为用Spring编写的REST服务建立一个简单的Arquillian测试。 Here is my SpringBoot application: 这是我的SpringBoot应用程序:

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

and controller: 和控制器:

@RestController
public class TestController {
    @RequestMapping(value = "/test", method = RequestMethod.GET)
    public ResponseEntity test() {
        return ResponseEntity.status(HttpStatus.OK).body("Hello world");
    }
}

then I want to test it running Arquillian test: 然后我想运行Arquillian测试来测试它:

@RunWith(Arquillian.class)
public class TestControllerTest {
    @Deployment(testable = false)
    public static WebArchive createDeployment() {
        File[] files = Maven.resolver()
                .loadPomFromFile("pom.xml")
                .importRuntimeDependencies()
                .resolve().withTransitivity()
                .asFile();
        return ShrinkWrap.create(WebArchive.class)
                .addPackage(pl.fuv.Application.class.getPackage())
                .addPackage(TestController.class.getPackage())
                .addAsLibraries(files);
    }

    @Test
    @RunAsClient
    public void callRest(@ArquillianResteasyResource final WebTarget webTarget) {
        Response response = webTarget.path("/test").request().get();
        String result = response.readEntity(String.class);
        assertEquals("Hello world", result);
    }
}

During deployment I get runtime exception: 在部署期间,出现运行时异常:

SEVERE: Servlet [jsp] in web application [/0a1cee74-c798-46af-9402-474168676ae6] threw load() exception java.lang.ClassNotFoundException: org.apache.jasper.servlet.JspServlet at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1291) at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1119) at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:544) at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:525) at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:150) at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1050) at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:989) at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4931) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5241) at org.a 严重:Web应用程序[/ 0a1cee74-c798-46af-9402-474168676ae6]中的Servlet [jsp]引发load()异常java.lang.ClassNotFoundException:org.apache.jasper.servlet.JspServlet位于org.apache.catalina.loader。 org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1119)处的WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1291)org.org处的org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:544) org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:150)处的org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:525)org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper) .java:1050)(位于org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:989),位于org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4931),位于org.apache.catalina。 org.a的core.StandardContext.startInternal(StandardContext.java:5241) pache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:752) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:728) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:734) at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:986) at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1857) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748) 位于org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:752)的pache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)位于org.apache.catalina.core.ContainerBase.addChild(ContainerBase。 org.apache.catalina.core.StandardHost.addChild(StandardHost.java:734)处org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:986)处org.apache.catalina.startup处的java:728) .HostConfig $ DeployWar.run(HostConfig.java:1857)在java.util.concurrent.Executors $ RunnableAdapter.call(Executors.java:511)在java.util.concurrent.FutureTask.run(FutureTask.java:266)在位于java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:624)的java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)在java.lang.Thread.run(Thread.java:748)

and Arquillian gets 404 HTTP response calling the service: Arquillian收到404 HTTP响应,调用该服务:

org.junit.ComparisonFailure: Expected :Hello world Actual org.junit.ComparisonFailure:预期的:Hello world Actual
:HTTP Status 404 – Not Found (...) :HTTP状态404 –找不到(...)

My guess is that I build deployment artifact in a wrong way, that is missing something, but I could not find any info what might be wrong. 我的猜测是我以错误的方式构建了部署工件,这缺少了一些东西,但是我找不到任何信息可能是错误的。

You need to add a dependency on jasper: 您需要对jasper添加依赖项:

<dependency>
    <groupId>org.apache.tomcat</groupId>
    <artifactId>jasper</artifactId>
    <version>6.0.32</version>
</dependency>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM