Apache CXF with WSDL First Example
www.igiftidea.com
example of how to use Apache CXF to create a web service starting from a WSDL file.
- First, we need to create a WSDL file that describes our web service. Let's create a file called "hello.wsdl" that will define a simple web service with a single method called "sayHello" that takes a String parameter and returns a String:
<?xml version="1.0" encoding="UTF-8"?> <definitions name="HelloService" targetNamespace="http://example.com/hello" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://example.com/hello" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <message name="sayHelloRequest"> <part name="name" type="xsd:string"/> </message> <message name="sayHelloResponse"> <part name="greeting" type="xsd:string"/> </message> <portType name="HelloPortType"> <operation name="sayHello"> <input message="tns:sayHelloRequest"/> <output message="tns:sayHelloResponse"/> </operation> </portType> <binding name="HelloBinding" type="tns:HelloPortType"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="sayHello"> <soap:operation soapAction=""/> <input> <soap:body use="literal"/> </input> <output> <soap:body use="literal"/> </output> </operation> </binding> <service name="HelloService"> <port name="HelloPort" binding="tns:HelloBinding"> <soap:address location="http://localhost:8080/hello"/> </port> </service> </definitions>
In this file, we're defining a message for the "sayHello" request and response, a port type for our web service with the "sayHello" operation, a binding that defines how the SOAP messages will be transmitted over HTTP, and a service that exposes our web service at the "/hello" URL.
- Next, we need to use the CXF "wsdl2java" tool to generate Java code from our WSDL file. To do this, run the following command:
wsdl2java -d /path/to/output/dir hello.wsdl
This will generate Java classes in the specified output directory that correspond to the types and operations defined in the WSDL file.
- Now we can create an implementation of our web service by extending the generated Java classes. Let's create a class called "HelloServiceImpl" that will have a single method called "sayHello" that takes a String parameter and returns a String:
package com.example; public class HelloServiceImpl implements HelloPortType { public String sayHello(String name) { return "Hello " + name; } }
Note that we're implementing the "HelloPortType" interface that was generated from our WSDL file.
- Finally, we need to create a main method that will start up our web service. Here's what the main method should look like:
import javax.xml.ws.Endpoint; public class HelloServicePublisher { public static void main(String[] args) { // Create the web service endpoint Endpoint.publish("http://localhost:8080/hello", new HelloServiceImpl()); // Wait for the user to terminate the program