Maven POM Information
To use CXF within Maven, you'll need to declare the CXF dependencies in your POM. The CXF groupId is "org.apache.cxf". Here is a small example:
Code Block | ||||
---|---|---|---|---|
| ||||
<properties> <cxf.version>2.2.3</cxf.version> </properties> <dependencies> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-frontend-jaxws</artifactId> <version>2.0.2-incubator<<version>${cxf.version}</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-http</artifactId> <version>2.0.2-incubator<<version>${cxf.version}</version> </dependency> <!-- Jetty is needed if you're are not using the CXFServlet --> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-http-jetty</artifactId> <version>2.0.2-incubator<<version>${cxf.version}</version> </dependency> </dependencies> |
You'll also need to add the Apache Incubator Maven repository:
...
<repositories>
<repository>
<id>apache-snapshots</id>
<name>Apache SNAPSHOT Repository</name>
<url>http://people.apache.org/repo/m2-snapshot-repository/</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>apache-incubating</id>
<name>Apache Incubating Repository</name>
<url>http://people.apache.org/repo/m2-incubating-repository/</url>
</repository>
<!-- for jaxb-impl -->
<repository>
<id>java.net</id>
<url>http://download.java.net/maven/1/</url>
<layout>legacy</layout>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>apache-plugin-snapshots</id>
<name>Apache Maven Plugin Snapshots</name>
<url>http://people.apache.org/repo/m2-snapshot-repository</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
<pluginRepository>
<id>apache-plugin-incubating</id>
<name>Apache Plugin Incubating Repository</name>
<url>http://people.apache.org/repo/m2-incubating-repository/</url>
</pluginRepository>
</pluginRepositories>
Maven Plugin
WSDL2Java
CXF includes a Maven plugin which can generate artifacts from WSDL. Here is a simple example:
...
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>2.0.2-incubator</version>
<executions>
<execution>
<id>generate-sources</id>
<phase>generate-sources</phase>
<configuration>
<sourceRoot>${basedir}/target/generated/src/main/java</sourceRoot>
<wsdlOptions>
<wsdlOption>
<wsdl>${basedir}/src/main/wsdl/myService.wsdl</wsdl>
</wsdlOption>
</wsdlOptions>
</configuration>
<goals>
<goal>wsdl2java</goal>
</goals>
</execution>
</executions>
</plugin>
In this example we're running the wsdl2java goal in the generate-sources phase. CXF will generate artifacts in the <sourceRoot> directory that you specify. Each <wsdlOption> element corresponds to a WSDL that you're generated artifacts for. In the above example we're generating we're specifying the WSDL location via the <wsdl> option.
Other configuration arguments can be include inside the <wsdlOption> element. These pass arguments to the tooling and correspond to the options outlined on the WSDL To Java page.
Example 1: Passing in a JAX-WS Binding file
...
<configuration>
<sourceRoot>${basedir}/target/generated/src/main/java</sourceRoot>
<wsdlOptions>
<wsdlOption>
<wsdl>${basedir}/src/main/wsdl/myService.wsdl</wsdl>
<extraargs>
<extraarg>-b</extraarg>
<extraarg>${basedir}/src/main/resources/wsdl/async_binding.xml</extraarg>
</extraargs>
</wsdlOption>
</wsdlOptions>
</configuration>
In this example we're specifying that we want CXF to use our JAX-WS binding file. Binding files are a way to customize the output of the artifacts that CXF generates. For instance, it allows you to change the package name CXF uses.
Example 2: Specifying a service to generate artifacts for
...
<configuration>
<sourceRoot>${basedir}/target/generated/src/main/java</sourceRoot>
<wsdlOptions>
<wsdlOption>
<wsdl>${basedir}/src/main/wsdl/myService.wsdl</wsdl>
<extraargs>
<extraarg>-sn</extraarg>
<extraarg>MyWSDLService</extraarg>
</extraargs>
</wsdlOption>
</wsdlOptions>
</configuration>
For information on using Maven with CXF and Tomcat, this blog entry may be helpful.
Additional Dependencies
Depending on your usage of CXF, you may need to bring in additional dependencies--the mvn install process will usually make clear what you are missing. Here's a non-exhaustive list of additional CXF artifacts that may be needed:
Code Block |
---|
<!-- Use dependency blocks for these CXF artifact Ids just as above -->
cxf-rt-core
cxf-rt-frontend-simple
cxf-rt-frontend-jaxws
cxf-rt-databinding-aegis
cxf-rt-transports-local
cxf-rt-transports-http
cxf-rt-transports-http-jetty
cxf-rt-transports-jms
cxf-rt-management
cxf-common-utilities
|
Maven Snapshot Repository
To work with the latest non-release versions of CXF (not recommended for production use), updated nightly, change the CXF version to the -SNAPSHOT version desired and add the Apache snapshot repository to both the repositories and pluginRepositories sections:
Code Block |
---|
<repositories>
...other repos...
<repository>
<id>apache-snapshots</id>
<name>Apache SNAPSHOT Repository</name>
<url>http://repository.apache.org/snapshots/</url>
<snapshots>
<enabled>true</enabled> |
In this example we're specifying that we only want to generate artifacts for the service named "MyWSDLService" in the WSDL.
Java2WSDL
CXF also includes a Maven plugin which can generate WSDL from Java code. Here is a simple example:
Code Block | ||
---|---|---|
xml | xml | <plugin> <groupId>org.apache.cxf</groupId> <artifactId>cxf-codegen-plugin</artifactId> <version>2.0.2-incubator</version> <dependencies> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-frontend-jaxws</artifactId> <version>2.0.2-incubator</version> </dependency> </dependencies> <executions> <execution> <id>generate-wsdl</id> <phase>process-classes</phase> <configuration> <className>org.example.MyService</className> </configuration>snapshots> <goals> <goal>java2wsdl</goal> </goals>repository> </execution>repositories> </executions> </plugin> |
Here are the options you can use:
Code Block |
---|
<configuration> <pluginRepositories> <className>...</className> <classPath>other repos...</classPath> <outputFile>...</outputFile><pluginRepository> <serviceName>...</serviceName> <soap12>...</soap12> same repo as <targetNameSpace>above...</targetNameSpace> <verbose>...</verbose> <quiet>...</quiet>pluginRepository> </configuration>pluginRepositories> |
Java2WS
This plugin will be ready in 2.1 release .Now You can use 2.1-incubator-SNAPSHOT version of this plugin.
This plugin can generate WSDL, server side code used to start web service and client side code from
a java class.
Here is a simple example:
...
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-java2ws-plugin</artifactId>
<version>2.1-incubator-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>2.1-incubator-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-simple</artifactId>
<version>2.1-incubator-SNAPSHOT</version>
</dependency>
</dependencies>
<executions>
<execution>
<id>generate-test-sources</id>
<phase>generate-test-sources</phase>
<configuration>
<className>org.apache.hello_world.Greeter</className>
<genWsdl>true</genWsdl>
<verbose>true</verbose>
</configuration>
<goals>
<goal>java2ws</goal>
</goals>
</execution>
</executions>
</plugin>
Here are the options you can use:
Code Block |
---|
<configuration>
<className>...</className>
<classPath>...</classPath>
<outputFile>...</outputFile>
<genWsdl>..</genWsdl>
<genServer>..</genServer>
<genClient>..</genClient>
<genWrapperbean>..</genWrapperbean>
<frontend>...</frontend>
<databinding>...</databinding>
<serviceName>...</serviceName>
<soap12>...</soap12>
<targetNameSpace>...</targetNameSpace>
<verbose>...</verbose>
<quiet>...</quiet>
</configuration>
|
The outputFile value by default will be:
Code Block |
---|
{project.build.directory}/generated/wsdl/{className}.wsdl
|
Refer to this link http://cwiki.apache.org/CXF20DOC/java-to-ws.html for other options detailed usageThe addition to the plugin repositories section is needed because the cxf-codegen-plugin, used for the WSDL2Java, Java2WS, etc. tasks, is downloaded using that entry.