user3899879
user3899879

Reputation: 257

Spring Boot vs. Apache CXF for RESTful Web Services?

I am part of a coding competition, the task is to create a RESTful online marketplace where users can post buy and sell requests via http.

I need to build a front end web service that accepts and stores these requests.

The tech requirements include both Spring boot and CXF. As far as I am aware, both CXF and Spring boot are capable of accepting http requests.

In spring boot, you use a controller like:

@Controller
@EnableAutoConfiguration
public class controller {

    @RequestMapping("/")
    @ResponseBody
    String home() {
        return "Hello, World!";
    }
}

Whereas with CXF (using javax.ws.rs), the code might look like this:

@WebService(serviceName = "MarketService", targetNamespace = "http://localhost:9005")
@Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public interface MarketService {

    @GET
    @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
    @Produces({ MediaType.APPLICATION_JSON })
    @Path("/sells/{id}")
    public prod getProduct(@PathParam("id") int id);

Can someone help me understand the fundamental difference between these two approaches to handling http requests? Is there a way I can use both Spring Boot and CXF in the same application?

Upvotes: 17

Views: 23786

Answers (3)

Dennis Kieselhorst
Dennis Kieselhorst

Reputation: 1387

Use the Spring Boot CXF JAX-RS starter by adding:

<dependency>
  <groupId>org.apache.cxf</groupId>
  <artifactId>cxf-spring-boot-starter-jaxrs</artifactId>
  <version>3.1.7</version>
</dependency>

See also: http://cxf.apache.org/docs/springboot.html

Upvotes: 2

Christophe L
Christophe L

Reputation: 14035

Spring MVC and Apache CXF are 2 separate frameworks to handle HTTP requests and that can be used to build REST web services.

  • Spring MVC is a project under the Spring "umbrella" (and therefore strongly tied to the Spring framework on top of which it's built),
  • Apache CXF is a open-source implementation of JAX-RS (REST) and JAX-WS (SOAP). Apache CXF can be run standalone or be included in a Spring application.

If you are looking to build a REST web service, they are pretty much mutually exclusive (you have to pick one). If all you're going to do is build REST web services, then they're pretty much equivalent. If you also need to have an MVC framework to serve HTML pages, then Spring MVC has that capability (CXF does not).

Personal opinion: Spring MVC is easier to get started with (thanks to Spring Boot which handles most of the configuration for you) than CXF (which requires more XML configuration).

PS: in your CXF example, you have a @WebService annotation. This annotation is part of JAX-WS (SOAP), not JAX-RS (REST). You probably don't need it.

Upvotes: 40

David Blevins
David Blevins

Reputation: 19368

Check this project out for nice starter for JAX-RS (REST) that leverages CXF on Tomcat via TomEE.

Everything is all setup and ready to go.

Long description here:

Note, running CXF "Standalone" still requires a Servlet container (Tomcat or Jetty), so the above is several steps completed, simplified and finished in a small starter project. Designed for impatient people (like myself) that don't like to read directions and just like to start hacking. Always easier for me to start with something that works and then tweak it.

Upvotes: 1

Related Questions