Enabling CXF goodies in Spring Boot

In this post we are going to add some of the CXF features to our existing app that we developed in previous post. These features are :

  1. ID Logging
  2. Jackson Provider for POJO to JSON conversion
  3. Swagger 2 documentation

Step 1: Configuration class

Create a RestServer class in config package as shown below

package org.blog.config;

import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;
import org.apache.cxf.feature.LoggingFeature;
import org.apache.cxf.jaxrs.swagger.Swagger2Feature;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * Created by Anand_Rajneesh on 3/23/2017.
 */
@Configuration
public class RestServer {

    @Bean
    public JacksonJsonProvider jsonProvider(){
        return new JacksonJsonProvider();
    }

    @Bean
    public LoggingFeature loggingFeature(){
        return new LoggingFeature();
    }

    @Bean
    public Swagger2Feature swagger(){
        Swagger2Feature swagger = new Swagger2Feature();
        swagger.setBasePath("/services");
        swagger.setContact("");
        swagger.setLicense("");
        swagger.setTitle("Demo Spring Boot CXF Application");
        swagger.setDescription("");
        return swagger;
    }
}

 

We have 3 @Bean methods, which are returning instances of each feature.

Step 2: POM dependencies

<dependency>
    <groupId>com.fasterxml.jackson.jaxrs</groupId>
    <artifactId>jackson-jaxrs-json-provider</artifactId>
    <version>2.8.5</version>
</dependency>
<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-rs-service-description-swagger</artifactId>
    <version>${cxf.version}</version>
</dependency>
<dependency>
    <groupId>org.webjars</groupId>
    <artifactId>swagger-ui</artifactId>
    <version>${swaggerui.version}</version>
</dependency>

 

Step 3: Adding Swagger annotations

Add swagger annotations to Ping service that was created in previous past like below :

package org.blog.rest;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import org.springframework.stereotype.Service;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

/**
 * Created by Anand_Rajneesh on 3/24/2017.
 */
@Path("/ping")
@Service
@Api(value = "ping")
@Produces(MediaType.TEXT_PLAIN)
public class Ping {

    @GET
    @ApiOperation(value="Health Check")
    @ApiResponse(code=200, message ="")
    public Response health(){
        return Response.ok().build();
    }
}

 

Now go ahead and deploy the server, and go at http://localhost:8080/services/services. You would get a link to swagger ui there.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s