יום ראשון, 20 באפריל 2014

Simple Rest Camel Service

The rest service is build using apache :Camel , Cxf , and tomcat service .
Capture35

The artifacts
Capture36 

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.xsd
       http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
       http://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";
  
    @Override
    public 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 ();
}

The project
Capture37


running


Execute the project using the maven Tomcat:Redeploy goal


soap ui


The resource :/camel-example-cxfrs-tomcat/webservices/myData/RsService/SayHello


Capture34

אין תגובות:

הוסף רשומת תגובה