JAX-RS: Maven Plugins

Introduction

A wadl2java Maven plugin for generating the Java code from WADL documents and a new Maven archetype for speeding up the creation of Spring-based CXF JAX-RS web applications are currently available.

Archetypes

Maven archetypes can help with creating the boilerplate code which can be used to build a working application fast.

CXF 2.5.1 introduces an org.apache.cxf.archetype:cxf-jaxrs-service archetype plugin for creating and testing a simple Spring-based JAX-RS web application.

Here is how you can use it from the command line.

~/work/archetypes$

mvn archetype:generate -Dfilter=org.apache.cxf.archetype:

[INFO] Scanning for projects...
[INFO]                                                                         
......
[INFO] No archetype defined. Using maven-archetype-quickstart (org.apache.maven.archetypes:maven-archetype-quickstart:1.0)
Choose archetype:
1: remote -> org.apache.cxf.archetype:cxf-jaxrs-service (Simple CXF JAX-RS webapp service using Spring configuration)
2: remote -> org.apache.cxf.archetype:cxf-jaxws-javafirst (Creates a project for developing a Web service starting from Java code)
Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): : 1
Choose version: 
1: 2.5.1
2: 2.5.2-SNAPSHOT
Choose a number: 2: 1
Downloading: http://repo1.maven.org/maven2/org/apache/cxf/archetype/cxf-jaxrs-service/2.5.1/cxf-jaxrs-service-2.5.1.jar
Downloaded: http://repo1.maven.org/maven2/org/apache/cxf/archetype/cxf-jaxrs-service/2.5.1/cxf-jaxrs-service-2.5.1.jar (10 KB at 15.2 KB/sec)
......
Define value for property 'groupId': : org.examples.rest
Define value for property 'artifactId': : simple
Define value for property 'version':  1.0-SNAPSHOT: : 
Define value for property 'package':  org.examples.rest: : 
Confirm properties configuration:
groupId: org.examples.rest
artifactId: simple
version: 1.0-SNAPSHOT
package: org.examples.rest
 Y: : Y

[INFO] project created from Archetype in dir: ~/work/archetypes/simple
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------

~/work/archetypes$ tree simple
simple
├── pom.xml
└── src
    ├── main
    │   ├── java
    │   │   └── org
    │   │       └── examples
    │   │           └── rest
    │   │               ├── HelloWorld.java
    │   │               └── JsonBean.java
    │   └── webapp
    │       └── WEB-INF
    │           ├── beans.xml
    │           └── web.xml
    └── test
        └── java
            └── org
                └── examples
                    └── rest
                        └── HelloWorldIT.java


~/work/archetypes$ cd simple

~/work/archetypes/simple$ mvn install
[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building Simple CXF JAX-RS webapp service using spring configuration 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
Downloading: http://repo1.maven.org/maven2/org/apache/cxf/cxf-rt-frontend-jaxrs/2.5.1/cxf-rt-frontend-jaxrs-2.5.1.pom
......
[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ simple ---
[INFO] Compiling 2 source files to ~/work/archetypes/simple/target/classes
[INFO]
...... 
[INFO] --- maven-war-plugin:2.1.1:war (default-war) @ simple ---
......
[INFO] Building war: ~/work/archetypes/simple/target/simple-1.0-SNAPSHOT.war
[INFO] 
[INFO] <<< tomcat-maven-plugin:1.1:run-war (start-tomcat) @ simple <<<
[INFO] 
[INFO] --- tomcat-maven-plugin:1.1:run-war (start-tomcat) @ simple ---
[INFO] Running war on http://localhost:47586/jaxrs-service
......
INFO: Starting tomcat server
06-Jan-2012 12:47:53 org.apache.catalina.core.StandardEngine start
......
INFO: Starting Coyote HTTP/1.1 on http-47586
[INFO] 
......
-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running org.examples.rest.HelloWorldIT
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.823 sec

Results :

Tests run: 2, Failures: 0, Errors: 0, Skipped: 0
......
[INFO] 
[INFO] --- maven-install-plugin:2.3.1:install (default-install) @ simple ---
[INFO] Installing ~/work/archetypes/simple/target/simple-1.0-SNAPSHOT.war to ~/.m2/repository/org/examples/rest/simple/1.0-SNAPSHOT/simple-1.0-SNAPSHOT.war
[INFO] Installing ~/work/archetypes/simple/pom.xml to ~/.m2/repository/org/examples/rest/simple/1.0-SNAPSHOT/simple-1.0-SNAPSHOT.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
~/work/archetypes/simple$

Note that an "org.apache.cxf.archetype:" filter is used to restrict a number of available archetypes and then a jaxrs archetype is selected. After the sample project has been created it is built and the integration tests are run.

Integration with Eclipse should also be possible.