= 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 {{{#!highlight xml 4.0.0 com.test cxfSpringTest 0.1 war org.apache.cxf cxf-rt-core 2.4.1 org.apache.cxf cxf-bundle-jaxrs 2.4.1 org.apache.cxf cxf-rt-frontend-jaxws 2.4.1 }}} * nano src/main/java/com/test/Calculator.java {{{#!highlight java package com.test; public class Calculator implements ICalculator { public Calculator() { System.out.println("Calculator created "); } public long add(long num1, long num2) { return (num1 + num2); } public long subtract( long num1, long num2 ){ return num1 - num2; } } }}} * nano src/main/java/com/test/ICalculator.java {{{#!highlight java package com.test; import javax.jws.WebService; @WebService public interface ICalculator { public long add(long num1 , long num2 ); public long subtract(long num1, long num2 ); } }}} * nano src/main/webapp/WEB-INF/applicationContext.xml {{{#!highlight xml }}} * nano src/main/webapp/WEB-INF/web.xml {{{#!highlight xml CXFServlet org.apache.cxf.transport.servlet.CXFServlet CXFServlet /* org.springframework.web.context.ContextLoaderListener Spring org.springframework.web.servlet.DispatcherServlet 0 }}} * nano src/main/java/com/test/TestService.java {{{#!highlight java package com.test; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.core.Response; @Path("/testSvc") public class TestService { @GET @Path("/{param}") public Response getMsg(@PathParam("param") String msg) { String out = String.format("testSvc returns %s", msg); return Response.status(200).entity(out).build(); } } }}} 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 {{{#!highlight java /* vitor@darkstar:/tmp/cxfSpringTest/src/main/java $ javac com/test/client/*.java vitor@darkstar:/tmp/cxfSpringTest/src/main/java $ java -cp . com.test.client.Client AAAA 5 */ package com.test.client; public class Client{ public static void main(String args[] ){ System.out.println("AAAA"); CalculatorService cs = new CalculatorService(); ICalculator ic = cs.getCalculatorPort(); long res = ic.add(2,3); System.out.println(res); } } }}} == 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 == JAX-WS Response.status == * http://docs.oracle.com/javaee/6/api/javax/ws/rs/core/Response.Status.html Commonly used status codes defined by HTTP * http://docs.oracle.com/javaee/6/api/javax/ws/rs/core/Response.Status.html#BAD_REQUEST * http://docs.oracle.com/javaee/6/api/javax/ws/rs/core/Response.Status.html#OK * http://docs.oracle.com/javaee/6/api/javax/ws/rs/core/Response.Status.html#CONFLICT * http://docs.oracle.com/javaee/6/api/javax/ws/rs/core/Response.StatusType.html#getStatusCode() == CXF sample WSSE == * http://svn.apache.org/viewvc/cxf/trunk/distribution/src/main/release/samples/ws_security/ut/ * https://github.com/apache/cxf/tree/master/distribution/src/main/release/samples/ws_security/ut