The rest service is build using apache :Camel , Cxf , and tomcat service .
The artifacts
The pom file:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.apache.camel</groupId><artifactId>examples</artifactId><version>2.13.0</version></parent><artifactId>camel-example-cxfrs-tomcat</artifactId><name>Camel :: Example :: CXFRS :: Tomcat</name><description>An example using Camel CXFRS with Apache Tomcat</description><packaging>war</packaging><build><plugins><plugin><groupId>org.codehaus.mojo</groupId><artifactId>tomcat-maven-plugin</artifactId><version>1.1</version><configuration><server>TomcatServer</server><url>${tomcat.url}</url><path>/${project.build.finalName}</path></configuration></plugin><plugin><groupId>org.codehaus.mojo</groupId><artifactId>exec-maven-plugin</artifactId><configuration><mainClass>org.apache.camel.example.cxf.CamelRouteClient</mainClass><includePluginDependencies>false</includePluginDependencies><systemProperties><property><key>java.util.logging.config.file</key><value>logging.properties</value></property></systemProperties></configuration></plugin></plugins><!-- Name of the generated WAR file --><finalName>camel-example-cxfrs-tomcat</finalName></build><dependencies><!-- camel --><dependency><groupId>org.apache.camel</groupId><artifactId>camel-core</artifactId></dependency><dependency><groupId>org.apache.camel</groupId><artifactId>camel-spring</artifactId></dependency><dependency><groupId>org.apache.camel</groupId><artifactId>camel-cxf</artifactId></dependency><dependency><groupId>org.apache.camel</groupId><artifactId>camel-gson</artifactId></dependency><dependency><groupId>org.apache.camel</groupId><artifactId>camel-servlet</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId></dependency><!-- cxf --><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><!-- logging --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId></dependency></dependencies><profiles><profile><id>Tomcat7</id><activation><activeByDefault>true</activeByDefault></activation><properties><tomcat.url>http://localhost:8080/manager/text</tomcat.url></properties></profile><profile><id>Tomcat6</id><properties><tomcat.url>http://localhost:8080/manager</tomcat.url></properties></profile></profiles></project>
The web.xml
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"><display-name>My Web Application</display-name><!-- location of spring xml files --><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:camel-config.xml</param-value></context-param><!-- the listener that kick-starts Spring --><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!-- CXF servlet --><servlet><servlet-name>CXFServlet</servlet-name><servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class><load-on-startup>1</load-on-startup><!-- If you want to leverage the Servlet3's async feature in Tomcat,
please enable this feature<async-supported>true</async-supported>--></servlet><!-- all our webservices are mapped under this URI pattern --><servlet-mapping><servlet-name>CXFServlet</servlet-name><url-pattern>/webservices/*</url-pattern></servlet-mapping></web-app>
The web xml file declares a route for the tomcat server :
When the tomcat receives the following url pattern:/webservices/* send the message to the cxf servlet.(org.apache.cxf.transport.servlet.CXFServlet)
Although the web config kicks off the camel configuration procedure .
The Camel config.xml
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:camel="http://camel.apache.org/schema/spring"xmlns:cxf="http://camel.apache.org/schema/cxf"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsdhttp://camel.apache.org/schema/cxf http://camel.apache.org/schema/cxf/camel-cxf.xsd"><!-- We still need it for loading the CXFServlet --><import resource="classpath:META-INF/cxf/cxf.xml"/><bean id="myRoutes" class="org.apache.camel.example.cxf.CamelRoute"/><camelContext xmlns="http://camel.apache.org/schema/spring"><routeBuilder ref="myRoutes"/></camelContext></beans>
Declare a route builder bean .
The camel route
package org.apache.camel.example.cxf;import javax.ws.rs.core.Response;import org.apache.camel.Exchange;import org.apache.camel.Processor;import org.apache.camel.builder.RouteBuilder;public class CamelRoute extends RouteBuilder {private String uri ="cxfrs:/myData?resourceClasses=org.apache.camel.example.cxf.RsService&bindingStyle=SimpleConsumer";@Overridepublic void configure() throws Exception {from(uri).process(new Processor() {public void process(Exchange exchange) throws Exception {Response r = Response.ok("This is the result").status(200).build();exchange.getOut().setBody(r);}});}}
The resource (the interface declaration)
package org.apache.camel.example.cxf;import javax.ws.rs.GET;import javax.ws.rs.Path;import javax.ws.rs.core.Response;@Path("/RsService/")public interface RsService{@GET@Path("/SayHello/")public Response SayHello ();}
running
Execute the project using the maven Tomcat:Redeploy goal
soap ui
The resource :/camel-example-cxfrs-tomcat/webservices/myData/RsService/SayHello
אין תגובות:
הוסף רשומת תגובה