Size: 4496
Comment:
|
Size: 7625
Comment:
|
Deletions are marked like this. | Additions are marked like this. |
Line 1: | Line 1: |
= Java/ApacheCXF = | = ApacheCXF = |
Line 4: | Line 4: |
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 SOAP Web Service == |
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 == |
Line 10: | Line 12: |
├── pom.xml ├── src │ └── main │ ├── java │ │ └── com │ │ └── test │ │ ├── Calculator.java │ │ └── ICalculator.java │ └── webapp │ ├── index.html │ └── WEB-INF │ ├── applicationContext.xml │ └── web.xml └── target }}} pom.xml |
|-- pom.xml |-- src | `-- main | |-- java | | `-- com | | `-- test | | |-- Calculator.java | | |-- ICalculator.java | | `-- TestService.java | `-- webapp | `-- WEB-INF | |-- applicationContext.xml | `-- web.xml `-- target }}} {{{#!highlight sh mkdir -p /tmp/cxfSpringTest cd /tmp/cxfSpringTest mkdir -p src/main/webapp/WEB-INF/ mkdir -p src/main/java/com/test/ }}} === pom.xml === |
Line 57: | Line 66: |
src/main/java/com/test/Calculator.java | === src/main/java/com/test/Calculator.java === |
Line 77: | Line 86: |
src/main/java/com/test/ICalculator.java | === src/main/java/com/test/ICalculator.java === |
Line 89: | Line 99: |
src/main/webapp/WEB-INF/applicationContext.xml | === src/main/webapp/WEB-INF/applicationContext.xml === |
Line 94: | Line 105: |
xmlns:jaxrs="http://cxf.apache.org/jaxrs" | |
Line 96: | Line 108: |
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"> | http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd "> |
Line 99: | Line 114: |
<!-- jax-ws --> | |
Line 102: | Line 117: |
<!-- jax-rs --> <jaxrs:server id="testService" address="/"> <jaxrs:serviceBeans> <ref bean="testService" /> </jaxrs:serviceBeans> </jaxrs:server> <bean id="testService" class="com.test.TestService" /> |
|
Line 106: | Line 127: |
src/main/webapp/WEB-INF/web.xml | === nano src/main/webapp/WEB-INF/web.xml === |
Line 136: | Line 157: |
src/main/webapp/index.html {{{#!highlight xml <html> <body>teste aaaa ....</body> </html> }}} http://localhost:8080/cxfSpringTest-0.1/services http://localhost:8080/cxfSpringTest-0.1/ |
=== 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 |
ApacheCXF
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
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>
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 }
src/main/java/com/test/ICalculator.java
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>
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:
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/?_wadl&_type=xml # save as app.wadl
Generate client
- 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
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()