在Java EE 7上骑骆驼–带有Swagger文档的REST服务

swagger_java_dsl_camel 骆驼开箱即用。 Swagger集成就是其中之一。 不幸的是,大多数已经存在的功能都严重依赖于Spring。 但这并不能阻止我们在普通的Java EE 7应用程序中使用它们,因为有时它只是服务器的轻量级变体。 但我不想再对此进行讨论。 相反,我认为在所有情况下都有一种技术选择,如果您运行一个项目,而只是想将Camel与Java EE 7一起使用,并且需要REST服务并希望通过Swagger将它们记录下来,那么这是适合您的文章。

在EE 7中引导骆驼

您需要做的第一件事是在单例启动bean中引导Camel。 我已经写了一篇有关如何执行此操作文章 。 另一个选择是实际使用wildfly-camel子系统 ,该子系统也可用,但这要求您使用JBoss WildFly8.x。

昂首阔步和骆驼休息依赖

到今天为止,Camel中的Swagger集成仅受Spring应用程序支持。 因此,要使此工作正常进行,我们必须比平时执行一些配置。 但是我保证,它不会太复杂,只需一分钟即可完成。 开始吧:

添加到基本Camel EE 7示例的第一件事是骆驼的其他依赖项:

<dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-servlet</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-metrics</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-swagger</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-jackson</artifactId>
        </dependency>

返回驼峰语境

如果无法使用其中的内容,则需要实现自己的CdiRestSwagger-Camel上下文查找。 即将推出的Camel版本有一些烹调方法,但是现在我们必须自己做。 这非常简单,因为我们需要覆盖RestSwaggerApiDeclarationServlet的一种方法。 除了简单地返回注入的CdiCamelContext外,这没有任何其他作用。

public class CdiRestSwaggerApiDeclarationServlet extends RestSwaggerApiDeclarationServlet {

    @Inject
    CdiCamelContext context;

    @Override
    public CamelContext lookupCamelContext(ServletConfig config) {
        return context;
    }
}

一些进一步的配置

我们还没有完成。 您还有更多配置要做。 由于Camel设计为可在许多不同的环境中运行,并且没有特定的Java EE 7版本,因此它仍然依赖于web.xml配置来映射映射servlet。 请特别注意CdiRestSwaggerApiDeclarationServlet初始化参数。 在这个简单的示例中,我不必费心找出它们,但仍然依靠它们。 因此,根据您在Maven构建中设置的应用程序的最终名称,需要对其进行调整。

<context-param>
        <param-name>contextConfigLocation</param-name>
        <!-- to use Java DSL -->
        <param-value>classpath:camel-config.xml</param-value>
 </context-param>

    <!-- to setup Camel Servlet -->
    <servlet>
       <display-name>Camel Http Transport Servlet</display-name>
        <servlet-name>CamelServlet</servlet-name>
        <servlet-class>org.apache.camel.component.servlet.CamelHttpTransportServlet<load-on-startup>1</load-on-startup>
    </servlet>

    <!-- to setup Camel Swagger api servlet -->
    <servlet>
        <!-- we are using our own swagger-cdi binding servlet -->
        <servlet-class>org.apache.camel.component.swagger.CdiRestSwaggerApiDeclarationServlet
        <init-param>
            <param-name>base.path</param-name>
            <param-value>http://localhost:8080/camel/rest</param-value>
        </init-param>
        <init-param>
            <param-name>api.path</param-name>
            <param-value>         http://localhost:8080/camel/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>2</load-on-startup>
    </servlet>

    <!-- swagger api declaration -->
    <servlet-mapping>
        <servlet-name>ApiDeclarationServlet</servlet-name>
        <url-pattern>/api-docs/*</url-pattern>
    </servlet-mapping>

    <!-- define that url path for the Camel Servlet to use -->
    <servlet-mapping>
        <servlet-name>CamelServlet</servlet-name>
        <url-pattern>/rest/*</url-pattern>
    </servlet-mapping>

    <!-- enable CORS filter so people can use swagger ui to browse and test the apis -->
    <filter>
        <filter-name>RestSwaggerCorsFilter</filter-name>
        <filter-class>org.apache.camel.component.swagger.RestSwaggerCorsFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>RestSwaggerCorsFilter</filter-name>
        <url-pattern>/api-docs/*</url-pattern>
        <url-pattern>/rest/*</url-pattern>
    </filter-mapping>

足够的配置–符合逻辑!

完成后,您需要一些逻辑。 我在这里使用的示例摘自Camel的官方示例,称为camel-example-servlet-rest-tomcat 。 请注意,该示例同时包含了基于XML DSL的定义和基于Java DSL的其余服务的定义。 我只使用了Java DSL,特别是UserRouteBuilder类中定义的路由。

确保为用户服务和用户添加@Named批注,并添加从UserRouteBuilder到启动bean的路由。

context.addRoutes(new UserRouteBuilder());

这就对了。 现在,您可以通过访问http:// localhost:8080 / camel / api-docs浏览浏览您的API。 如果要使用Swagger UI,则必须将其添加到应用程序中。 该示例应用程序包含构建部分中的所有内容,这是执行此操作所需的。 因此,请查看完整的GitHub项目,以了解如何使用Swagger UI浏览API。

翻译自: https://www.javacodegeeks.com/2014/12/riding-camel-on-java-ee-7-rest-services-with-swagger-documentation.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值