These are the steps to create a SOAP web service client from a wsdl file using the CXF codegen plugin:

1) Create a project

Create a new Maven project in eclipse using the quickstart archetype.

 

2) Import the wsdl file into the project

Import the wsdl file into directory src/main/resources.

 

3) Add plugins and dependencies to the pom.xml file

Add the maven-compiler-plugin and the cxf-codegen-plugin as follows.  The codegen configuration includes the directory for generated clases and the location of the wsdl file.

<properties>
	<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	<cxf.version>3.0.2</cxf.version>
</properties>
<build>
	<plugins>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-compiler-plugin</artifactId>
			<version>3.2</version>
			<configuration>
				<source>1.8</source>
				<target>1.8</target>
			</configuration>
		</plugin>
		<plugin>
			<groupId>org.apache.cxf</groupId>
			<artifactId>cxf-codegen-plugin</artifactId>
			<version>${cxf.version}</version>
			<executions>
				<execution>
					<id>generate-sources</id>
					<phase>generate-sources</phase>
					<configuration>
						<sourceRoot>${basedir}/src/generated</sourceRoot>
						<wsdlOptions>
							<wsdlOption>
								<wsdl>${basedir}/src/main/resources/CustomerOrders.wsdl</wsdl>
							</wsdlOption>
						</wsdlOptions>
					</configuration>
					<goals>
						<goal>wsdl2java</goal>
					</goals>
				</execution>
			</executions>
		</plugin>
	</plugins>

	<finalName>wsdlclient</finalName>
</build>

 

 

Add dependencies to the pom.xml as shown next:

<dependency>
	<groupId>org.apache.cxf</groupId>
	<artifactId>cxf-rt-frontend-jaxws</artifactId>
	<version>${cxf.version}</version>
</dependency>
<dependency>
	<groupId>org.apache.cxf</groupId>
	<artifactId>cxf-rt-transports-http</artifactId>
	<version>${cxf.version}</version>
</dependency>

 

4) Generate Classes with CXF codegen

Right-click on the project and select Run As > Maven generate-sources.  Several java files will be added to the src/generated directory, including request and response objects, a port type interface and a Service object.  The service object will handle the communication with the web service.

 

5) Create a class to handle interaction with the web service

Create a class that will interact with the web service using the classes generated in step 4.  Here’s an example:

public class SoapClientApp 
{
    public static void main( String[] args )
    {
        try {
			URL url = new URL("http://localhost:8080/04wsdlfirstws/services/customerOrders?wsdl");
			CustomerOrdersService service = new CustomerOrdersService(url);
			CustomerOrdersPortType port = service.getCustomerOrdersPort();
			GetOrdersRequest request = new GetOrdersRequest();
			request.setCustomerId(BigInteger.valueOf(1));
			
			GetOrdersResponse response = port.getOrders(request);
			List<Order> orders = response.getOrder();
			for (Order order : orders) {
				List<Product> products = order.getProduct();
				for (Product product : products) {
					String description = product.getDescription();
					BigInteger quantity = product.getQuantity();
					System.out.println("Product description: " + description);
					System.out.println("Product quantity: " + quantity);
				}
			}
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		};
    }
}