【问题标题】:Testing Spring REST services with Arquillian - ClassNotFoundException JspServlet使用 Arquillian 测试 Spring REST 服务 - ClassNotFoundException JspServlet
【发布时间】:2018-07-28 07:49:37
【问题描述】:

我正在尝试为使用 Spring 编写的 REST 服务设置一个简单的 Arquillian 测试。这是我的 SpringBoot 应用程序:

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

和控制器:

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

然后我想通过 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);
    }
}

在部署期间出现运行时异常:

严重:Web 应用程序中的 Servlet [jsp] [/0a1cee74-c798-46af-9402-474168676ae6] 抛出 load() 异常 java.lang.ClassNotFoundException:org.apache.jasper.servlet.JspServlet 在 org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1291) 在 org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1119) 在 org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:544) 在 org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:525) 在 org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:150) 在 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.core.StandardContext.startInternal(StandardContext.java:5241) 在 org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 在 org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:752) 在 org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:728) 在 org.apache.catalina.core.StandardHost.addChild(StandardHost.java:734) 在 org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:986) 在 org.apache.catalina.startup.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.runWorker(ThreadPoolExecutor.java:1149) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 在 java.lang.Thread.run(Thread.java:748)

并且 Arquillian 获得 404 HTTP 响应调用该服务:

org.junit.ComparisonFailure:预期:Hello world 实际
:HTTP 状态 404 – 不是 找到(...)

我的猜测是我以错误的方式构建部署工件,即遗漏了一些东西,但我找不到任何可能出错的信息。

【问题讨论】:

标签: java spring jboss-arquillian


【解决方案1】:

需要添加对jasper的依赖:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-17
    • 2012-08-22
    • 1970-01-01
    相关资源
    最近更新 更多