当前位置: 首页 > 知识库问答 >
问题:

如何使用camel-swagger-java和camel-servlet构建war文件

姜天宇
2023-03-14

我使用camel Rest DSL、camel-swagger-java和camel-servlet组件创建了一个rest Service,然后打包成war文件并部署到Wildfly-11.0.0。最终,但有以下例外:

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上。最终?期待你的回答。提前感谢。

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>

网状物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>

用户重新路由。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})");
}

}

共有1个答案

范俊逸
2023-03-14

您应该从web中删除侦听器声明。xml:

<listener>
    <listener-class>org.jboss.weld.environment.servlet.Listener</listener-class>
</listener>

它只对Tomcat、Jetty等普通Servlet容器真正有用。WildFly已经提供了Weld

 类似资料:
  • 我添加了io。quarkus:quarkus骆驼核心到我的应用程序,但直接启动在本机映像中不起作用。如果我在JVM中运行quarkus,那么它可以工作。 Github中有一些项目(https://github.com/apache/camel-quarkus/tree/master/extensions/direct)这在某种程度上表明,未来有一个扩展计划,但它没有得到官方支持。 如何使其以最小的

  • 我正在使用骆驼复制文件,但它没有发生,我正在使用Mac。抛出的消息为

  • 我刚刚开始学习阿帕奇骆驼。我了解路线和组件的基本知识。现在,我想尝试连接到Oracle数据库,从一个特定表中读取记录,并使用组件将这些记录写入文件。为了从数据库中读取数据,我假设需要使用JDBC组件,并给出数据源名称。 但是,我找不到有关如何使用camel创建数据源的任何信息。我找到的与此主题相关的所有信息都使用了Spring DSL示例。我不使用Spring,我只需要使用简单的独立Java应用程

  • 在中,我正在填充和。现在,我需要定义一个新的路由,它使用来自上传队列的消息,并复制一个本地文件夹(基于在上一个路由中生成的Id),并将其上传到目标文件夹,该文件夹是一个ftp服务器(这也在上一个路由中填充) 那么,如何设计一条新的路线,其中从和到终点都是动态的,如下所示?

  • 我在一个使用openrdf的项目中,我需要shade插件来转换我的服务条目。我想同时建立一个战争和一个罐子,因为这两种用法都是可能的。但是,我不能让shade插件同时生成带阴影的jar和带阴影的WAR-Shade只在属性中定义的包类型上调用,并且将jar插件绑定到包阶段以便在war旁边创建一个jar,结果会产生一个无阴影的jar。我怎样才能同时创建一个有阴影的罐子和一个有阴影的战争呢?

  • 这是我必须做的:外部服务器定期生成3个文件:“FI.date.nnnnn”、“FS.date.nnnnn”和GO.date.nnnnn”。这三个文件与相同的日期和nnnnn(=序列号)相关联。每个“三元组”都是唯一的名称。当GO文件存在时,我必须下载这些文件。这个GO文件是空的。 我用骆驼这个路线: 我使用“include=GO.*”来等待GO文件。 在我的AfterReceiveGo中,我使用了