MoinMoin Logo
  • Comments
  • Immutable Page
  • Menu
    • Navigation
    • RecentChanges
    • FindPage
    • Local Site Map
    • Help
    • HelpContents
    • HelpOnMoinWikiSyntax
    • Display
    • Attachments
    • Info
    • Raw Text
    • Print View
    • Edit
    • Load
    • Save
  • Login

Navigation

  • Start
  • Sitemap
Revision 14 as of 2016-01-06 22:58:54
  • Java
  • ApacheCXF

ApacheCXF

http://cxf.apache.org/

Apache CXF is an open source services framework. CXF helps you build and develop services using frontend programming APIs, like JAX-WS and JAX-RS. These services can speak a variety of protocols such as SOAP, XML/HTTP, RESTful HTTP, or CORBA and work over a variety of transports such as HTTP, JMS or JBI.

Sample project https://github.com/vborrego/cxf-test

Sample SOAP and REST Web Service

Structure:

.
|-- pom.xml
|-- src
|   `-- main
|       |-- java
|       |   `-- com
|       |       `-- test
|       |           |-- Calculator.java
|       |           |-- ICalculator.java
|       |           `-- TestService.java
|       `-- webapp
|           `-- WEB-INF
|               |-- applicationContext.xml
|               `-- web.xml
`-- target
  • mkdir -p /tmp/cxfSpringTest
  • cd /tmp/cxfSpringTest
  • mkdir -p src/main/webapp/WEB-INF/
  • mkdir -p src/main/java/com/test/
  • nano pom.xml

   1 <project
   2 xmlns="http://maven.apache.org/POM/4.0.0"
   3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   4 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   5   <modelVersion>4.0.0</modelVersion>
   6   <groupId>com.test</groupId>
   7   <artifactId>cxfSpringTest</artifactId>
   8   <version>0.1</version>
   9   <packaging>war</packaging>
  10   <dependencies>
  11     <dependency>
  12        <groupId>org.apache.cxf</groupId>
  13        <artifactId>cxf-rt-core</artifactId>
  14        <version>2.4.1</version>
  15     </dependency>
  16     <dependency>
  17        <groupId>org.apache.cxf</groupId>
  18        <artifactId>cxf-bundle-jaxrs</artifactId>
  19        <version>2.4.1</version>
  20     </dependency>
  21     <dependency>
  22        <groupId>org.apache.cxf</groupId>
  23        <artifactId>cxf-rt-frontend-jaxws</artifactId>
  24        <version>2.4.1</version>
  25     </dependency>
  26   </dependencies>
  27 </project>
  • nano src/main/java/com/test/Calculator.java

   1 package com.test;
   2 
   3 public class Calculator implements ICalculator
   4 {
   5     public Calculator() {
   6         System.out.println("Calculator created ");
   7     }
   8 
   9     public long add(long num1, long num2) {
  10         return (num1 + num2);
  11     }
  12 
  13     public long subtract( long num1, long num2  ){
  14         return num1 - num2;
  15     }
  16 }
  • nano src/main/java/com/test/ICalculator.java

   1 package com.test;
   2 import javax.jws.WebService;
   3 
   4 @WebService
   5 public interface ICalculator {
   6     public long add(long num1 , long num2 );
   7     public long subtract(long num1, long num2 );
   8 }
  • nano src/main/webapp/WEB-INF/applicationContext.xml

   1 <beans xmlns="http://www.springframework.org/schema/beans"
   2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   3 xmlns:jaxws="http://cxf.apache.org/jaxws"
   4 xmlns:jaxrs="http://cxf.apache.org/jaxrs"
   5 xsi:schemaLocation=" http://www.springframework.org/schema/beans
   6 http://www.springframework.org/schema/beans/spring-beans.xsd
   7 http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
   8 http://cxf.apache.org/jaxrs
   9 http://cxf.apache.org/schemas/jaxrs.xsd
  10 ">
  11     <import resource="classpath:META-INF/cxf/cxf.xml"/>
  12     <import resource="classpath:META-INF/cxf/cxf-servlet.xml"/>
  13     <!-- jax-ws -->
  14     <bean id="calculatorService" class="com.test.Calculator" scope="singleton" />
  15     <jaxws:endpoint implementor="#calculatorService" address="/calculator"  />
  16     <!-- jax-rs -->
  17     <jaxrs:server id="testService" address="/">
  18         <jaxrs:serviceBeans>
  19             <ref bean="testService" />
  20         </jaxrs:serviceBeans>
  21     </jaxrs:server>
  22     <bean id="testService" class="com.test.TestService" />
  23 </beans>
  • nano src/main/webapp/WEB-INF/web.xml

   1 <web-app>
   2   <!-- <context-param>
   3         <param-name>contextConfigLocation</param-name>
   4         <param-value>/WEB-INF/applicationContext.xml</param-value>
   5   </context-param>  default location for spring context  -->
   6   <servlet>
   7     <servlet-name>CXFServlet</servlet-name>
   8     <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
   9   </servlet>
  10   <servlet-mapping>
  11     <servlet-name>CXFServlet</servlet-name>
  12     <url-pattern>/*</url-pattern>
  13   </servlet-mapping>
  14   <listener>
  15     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  16   </listener>
  17   <servlet>
  18     <servlet-name>Spring</servlet-name>
  19     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  20     <!-- <init-param>
  21         <param-name>contextConfigLocation</param-name>
  22         <param-value>/WEB-INF/applicationContext.xml</param-value>
  23     </init-param> -->
  24     <load-on-startup>0</load-on-startup>
  25   </servlet>
  26 </web-app>
  • nano src/main/java/com/test/TestService.java

   1 package com.test;
   2 import javax.ws.rs.GET;
   3 import javax.ws.rs.Path;
   4 import javax.ws.rs.PathParam;
   5 import javax.ws.rs.core.Response;
   6 
   7 @Path("/testSvc")
   8 public class TestService {
   9 
  10     @GET
  11     @Path("/{param}")
  12     public Response getMsg(@PathParam("param") String msg) {
  13         String out = String.format("testSvc returns %s", msg);
  14         return Response.status(200).entity(out).build();
  15     }
  16 
  17 }

mvn clean compile package # builds cxfSpringTest-0.1.war

Test links:

  • http://localhost:8080/cxfSpringTest-0.1/services

  • http://localhost:8080/cxfSpringTest-0.1/testSvc/1001

Generate client:

  • wsimport -d src/main/java -keep -p com.test.client http://localhost:8081/cxfSpringTest-0.1/calculator?wsdl

nano com/test/client/Client.java

   1 /*
   2 vitor@darkstar:/tmp/cxfSpringTest/src/main/java
   3 $ javac com/test/client/*.java
   4 vitor@darkstar:/tmp/cxfSpringTest/src/main/java
   5 $ java -cp . com.test.client.Client 
   6 AAAA
   7 5
   8 */
   9 package com.test.client;
  10 
  11 public class Client{
  12     public static void main(String args[] ){
  13         System.out.println("AAAA");
  14         CalculatorService cs = new CalculatorService();
  15         ICalculator ic = cs.getCalculatorPort();
  16         long res = ic.add(2,3);
  17         System.out.println(res);
  18     }    
  19 }

Get project from GitHub

  • git clone https://github.com/vborrego/cxf-test

  • cd cxf-test
  • mvn clean install
  • http://localhost:8081/cxf-test-0.1/calculator?wsdl

  • http://localhost:8081/cxf-test-0.1/services

  • http://localhost:8081/cxf-test-0.1/testSvc/1001

  • http://localhost:8081/cxf-test-0.1/?_wadl&_type=xml # save as app.wadl

Generate client

  • wget http://search.maven.org/remotecontent?filepath=org/jvnet/ws/wadl/wadl-dist/1.1.6/wadl-dist-1.1.6-bin.zip

  • cp wadl-dist-1.1.6-bin.zip /tmp/
  • cd /tmp/
  • unzip wadl-dist-1.1.6-bin.zip
  • cd wadl-dist-1.1.6
  • cd bin
  • export JAVA_HOME=/opt/java
  • ./wadl2java
  • ./wadl2java -o . -p test app.wadl
  • MoinMoin Powered
  • Python Powered
  • GPL licensed
  • Valid HTML 4.01