RESTFul Service example using Apache CXF and Spring

In recent times there is lot of growth in RESTFul services. I thought it would be nice to talk about it.

This example is using Apache CXF and Spring. There are some other frameworks e.g Jersey (Reference Sun implementation), RestEasy, the JBoss choice and Apache CXF.

Here is bacic web configuration adding Spring context and CXF tranport servlet.

  <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/services.xml</param-value>
    </context-param>


    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <servlet>
        <servlet-name>CXFServlet</servlet-name>
        <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>CXFServlet</servlet-name>
        <url-pattern>/rest/*</url-pattern>
    </servlet-mapping>

There is Cities service using Spring annotations, this has been configured using Spring annotation
Second annottatiions is of CXF to define the mount point REST service

@Service("timeService")
@Path("cities")
public class CitiesListingService {

    @GET
    @Produces({"application/json", "application/xml"})
    public RestFulCities getCities() {
        List<City> cities = new LinkedList<City>();
        cities.add(new City("New Delhi", "011", "19M"));
        cities.add(new City("Mumbai", "022", "21M"));
        cities.add(new City("Chennai", "044", "10M"));
        RestFulCities restFulCities = new RestFulCities();
        restFulCities.setRestFulCityList(getCities(cities));
        return restFulCities;
    }

Here is Spring configuration for connection cxf and spring beans together.

<context:component-scan base-package="com.techartifact.example.spring"/>

    <import resource="classpath:META-INF/cxf/cxf.xml"/>
    <import resource="classpath:META-INF/cxf/cxf-extension-jaxrs-binding.xml"/>
    <import resource="classpath:META-INF/cxf/cxf-servlet.xml"/>

    <jaxrs:server id="restContainer" address="/">
        <jaxrs:serviceBeans>
            <ref bean="timeService"/>
        </jaxrs:serviceBeans>
        <jaxrs:extensionMappings>
            <entry key="json" value="application/json"/>
            <entry key="xml" value="application/xml"/>
        </jaxrs:extensionMappings>
        <jaxrs:providers>
            <ref bean="jaxbXmlProvider"/>
        </jaxrs:providers>
    </jaxrs:server>

    <!-- Webservice message handlers -->
    <bean id="jaxbXmlProvider" class="org.apache.cxf.jaxrs.provider.JAXBElementProvider">
        <property name="jaxbElementClassNames" ref="elements"/>
    </bean>

    <util:list id="elements">
        <value>com.techartifact.example.spring.model.RestFulCity</value>
        <value>com.techartifact.example.spring.model.RestFulCities</value>
    </util:list>

Yes that’s it. Now build the code and run it.

Run example

Download full example code from here spring-RESTapplication

Go to project directory [spring-RESTapplication] in command shell and run following command using maven

mvn clean package
mvn -Pcargo-run

http://localhost:8080/springrest/rest/cities

CXF can also produces output in json format, use following url to see out put in json

http://localhost:8080/springrest/rest/cities.json

Java bug

I am Java professional, working on Enterprise Java from last 8 years.

More Posts - Website

Follow Me:
TwitterLinkedIn