apache-camel - 如何使用camel-swagger-java和camel-servlet构建war文件
问题描述
我使用camel Rest DSL、camel-swagger-java 和camel-servlet 组件创建了一个rest 服务,然后打包成一个war 文件并部署到wildfly-11.0.0.Final,但出现以下异常:
Caused by: org.jboss.as.server.deployment.DeploymentUnitProcessingException: java.lang.ClassNotFoundException: org.jboss.weld.environment.servlet.Listener from [Module \"deployment.camelSample-0.0.1-SNAPSHOT.war\" from Service Module Loader]
有没有办法用camel-swagger-java和camel-servlet构建一个可以成功部署在wildfly-11.0.0.Final上的war文件?期待您的回答。提前致谢。
pom.xml
<dependencies>
<!-- CDI API -->
<dependency>
<groupId>javax.enterprise</groupId>
<artifactId>cdi-api</artifactId>
<version>1.2</version>
<scope>provided</scope>
</dependency>
<!-- Camel -->
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-cdi</artifactId>
<version>2.22.0</version>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-swagger-java</artifactId>
<version>2.22.0</version>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-servlet</artifactId>
<version>2.22.0</version>
<scope>runtime</scope>
<exclusions>
<exclusion>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-logging-juli</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- JSON support -->
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-jackson</artifactId>
<version>2.22.0</version>
</dependency>
</dependencies>
web.xml
<listener>
<listener-class>org.jboss.weld.environment.servlet.Listener</listener-class>
</listener>
<servlet>
<servlet-name>CamelServlet</servlet-name>
<servlet-class>org.apache.camel.component.servlet.CamelHttpTransportServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>CamelServlet</servlet-name>
<url-pattern>/camel/*</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>SwaggerServlet</servlet-name>
<servlet-class>org.apache.camel.swagger.servlet.RestSwaggerServlet</servlet-class>
<init-param>
<param-name>base.path</param-name>
<param-value>rest</param-value>
</init-param>
<init-param>
<param-name>api.path</param-name>
<param-value>api-docs</param-value>
</init-param>
<init-param>
<param-name>api.version</param-name>
<param-value>1.2.3</param-value>
</init-param>
<init-param>
<param-name>api.title</param-name>
<param-value>User Services</param-value>
</init-param>
<init-param>
<param-name>api.description</param-name>
<param-value>Camel Rest Example with Swagger that provides an User REST service</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- swagger api -->
<servlet-mapping>
<servlet-name>SwaggerServlet</servlet-name>
<url-pattern>/api-docs/*</url-pattern>
</servlet-mapping>
UserRestRoute.java
公共类 UserRestRoute 扩展 RouteBuilder {
@Override
public void configure() {
rest("/user").description("User rest service")
.consumes("application/json").produces("application/json")
.get("/{id}").description("Find user by id").outType(User.class)
.param().name("id").type(path).description("The id of the user to get").dataType("integer").endParam()
.responseMessage().code(200).message("The user").endResponseMessage()
.to("bean:userService?method=getUser(${header.id})");
}
}
解决方案
您应该从 web.xml 中删除侦听器声明:
<listener>
<listener-class>org.jboss.weld.environment.servlet.Listener</listener-class>
</listener>
它只对 Tomcat、Jetty 等普通 Servlet 容器真正有用。WildFly 已经为您提供了 Weld 和 CDI 集成。
推荐阅读
- java - java - 如何在java中将S3对象列表从一个文件夹移动/复制到文件夹?
- javascript - JavaScript库中的阻塞/非阻塞函数?
- reactjs - 如何使用 ConnectedRouter + Redux 处理存储
- apache - 如何将来自aws ec2实例(windows server 2012 R2)端口80的请求重定向到apache的8085端口?
- docker - `gcloud compute instances create-with-container`没有记录到stackdriver
- python - 带有滑块和固定几何图形的交互式 matplotlib
- html - 介绍 HTML 和 CSS 无法在 div 内正确居中画廊标题
- javascript - 我想将所有出现的“单词”替换为单词
- c++ - 通过搜索硬盘找到文件目录
- swift4 - 如何在没有 alamofire 且不将图像转换为字符串(base 64)的情况下在 api 中发送纯图像?