cxf-jaxws-SOAP Example-Live Resturant Example

This is a simple cxf-jaxws application.The appliction offers 2 services
  • cancel order
  • place order
The wsdl can be accessed at: http://localhost:8086/cxf-jaxws-LiveResturant/OrderService?wsdl
CXF webservice depends on the service endpoint interface.
Uses spring based configuration.
The application has been tested on tomcat and uses the latest cxf jar files.
  1. Create a web application project in eclipse
  2. cxf.xml -add a cxf.xml in web-inf folder
  3.  <beans xmlns="http://www.springframework.org/schema/beans"  
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
       xmlns:jaxws="http://cxf.apache.org/jaxws"  
      xmlns:wsa="http://cxf.apache.org/ws/addressing"   
      xmlns:wsrm-mgr="http://cxf.apache.org/ws/rm/manager"  
      xmlns:wsp="http://www.w3.org/2006/07/ws-policy"  
        xmlns:wsrm="http://schemas.xmlsoap.org/ws/2005/02/rm/policy"  
         xmlns:wsam="http://www.w3.org/2007/02/addressing/metadata"  
      xmlns:mtom="http://schemas.xmlsoap.org/ws/2004/09/policy/optimizedmimeserialization"  
      xsi:schemaLocation="http://www.springframework.org/schema/beans   
     http://www.springframework.org/schema/beans/spring-beans.xsd  
     http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd  
     http://cxf.apache.org/schemas/configuration/wsrm-manager.xsd  
     http://www.w3.org/2006/07/ws-policy http://www.w3.org/2006/07/ws-policy.xsd  
     http://cxf.apache.org/ws/rm/manager  
     http://cxf.apache.org/jaxws   
     http://cxf.apache.org/schemas/jaxws.xsd">  
     <jaxws:endpoint id="orderService" implementor="com.live.order.service.OrderServiceImpl" address="/OrderService">  
     </jaxws:endpoint >  
     </beans>  
    
  4. update the web.xml file --added cxf servlet and spring contextloader listener
     <?xml version="1.0" encoding="UTF-8"?>  
     <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">  
      <display-name>cxf-jaxws-poc</display-name>  
      <context-param>  
       <param-name>contextConfigLocation</param-name>  
       <param-value>WEB-INF/postgreSQL-beans.xml,WEB-INF/cxf.xml</param-value>  
      </context-param>  
      <listener>  
       <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
      </listener>  
      <servlet>  
       <servlet-name>CXFServlet</servlet-name>  
       <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>  
       <load-on-startup>1</load-on-startup>  
      </servlet>  
      <servlet-mapping>  
       <servlet-name>CXFServlet</servlet-name>  
       <url-pattern>/*</url-pattern>  
      </servlet-mapping>  
     </web-app>  
    
  5. Service EndPoint Interface-SEI

  6.  package com.live.order.service;  
     import javax.jws.WebService;  
     import com.live.order.domain.Order;  
     import javax.jws.WebMethod;  
     /**  
     * <pre>  
     * Service interface for Order Service operations, handles two operations. <ul>  
     *   <li>placeOrderRequest</li>  
     *   <li>cancelOrderRequest</li>  
     * </ul>  
     * </pre>  
     *  
     *  
     * @see OrderServiceImpl  
     *  
     */  
     @WebService  
     public interface OrderService {  
     @WebMethod  
       String placeOrder(Order order);  
     @WebMethod  
       boolean cancelOrder(String orderRef);  
     }  
    
  7. OrderServiceImpl
     package com.live.order.service;  
     import java.io.File;  
     import java.io.IOException;  
     import java.util.Calendar;  
     import javax.jws.WebService;  
     import org.apache.commons.io.FileUtils;  
     import org.apache.commons.lang.ObjectUtils;  
     import org.apache.log4j.Logger;  
     import org.springframework.context.ApplicationContext;  
     import org.springframework.context.support.ClassPathXmlApplicationContext;  
     import com.live.order.dao.OrderDAO;  
     import com.live.order.dao.OrderDAOImpl;  
     import com.live.order.domain.Order;  
     /**  
     * <pre>  
     * Service implementation for {@link OrderService}  
     * </pre>  
     *  
     * @see OrderService  
     *  
     */  
     @WebService  
     public class OrderServiceImpl implements OrderService {  
       private static final Logger logger = Logger.getLogger(OrderServiceImpl.class);  
       static ApplicationContext context;  
       OrderDAO dao;  
       public OrderServiceImpl() {  
            context = new ClassPathXmlApplicationContext("postgreSQL-beans.xml");  
            dao= (OrderDAO) context.getBean("OrderDAO");  
       }  
       public String placeOrder(Order order) {  
             order.setRefNumber(getRandomOrderRefNo());  
            // dao.insert_Order(order);  
         logger.info("Order has been placed. Order Info is : " + ObjectUtils.toString(order));  
        File file = new File("sample.txt");  
         System.out.println("file path : " + file.getAbsolutePath());  
         // We'll write the string below into the file  
         // To write a file called the writeStringToFile  
         // method which require you to pass the file and  
         // the data to be written.  
         try {  
                    FileUtils.writeStringToFile(file, ObjectUtils.toString(order));  
               } catch (IOException e) {  
                    // TODO Auto-generated catch block  
                    e.printStackTrace();  
               }  
         logger.info("Order has been placed. Order Info is : " + getRandomOrderRefNo());  
         return order.getRefNumber();  
       }  
       public boolean cancelOrder(String orderRef) {  
         logger.info("Order has been cancelled Order Reference : " + orderRef);  
         return true;  
       }  
       private String getRandomOrderRefNo() {  
         Calendar calendar = Calendar.getInstance();  
         int year = calendar.get(Calendar.YEAR);  
         int month = calendar.get(Calendar.MONTH);  
         int day = calendar.get(Calendar.DAY_OF_MONTH);  
         logger.info("Ref-" + year + "-" + month + "-" + day + "-" + Math.random());  
         return "Ref-" + year + "-" + month + "-" + day + "-" + Math.random();  
       }  
     }  
    
  8. Creating domain objects
    
     package com.live.order.domain;  
     public class Address {  
       protected String doorNo;  
       protected String building;  
       protected String street;  
       protected String city;  
       protected String country;  
       protected String phoneMobile;  
       protected String phoneLandLine;  
       protected String email;  
       /**  
        * Gets the value of the doorNo property.  
        *   
        * @return  
        *   possible object is  
        *   {@link String }  
        *     
        */  
       public String getDoorNo() {  
         return doorNo;  
       }  
       /**  
        * Sets the value of the doorNo property.  
        *   
        * @param value  
        *   allowed object is  
        *   {@link String }  
        *     
        */  
       public void setDoorNo(String value) {  
         this.doorNo = value;  
       }  
       /**  
        * Gets the value of the building property.  
        *   
        * @return  
        *   possible object is  
        *   {@link String }  
        *     
        */  
       public String getBuilding() {  
         return building;  
       }  
       /**  
        * Sets the value of the building property.  
        *   
        * @param value  
        *   allowed object is  
        *   {@link String }  
        *     
        */  
       public void setBuilding(String value) {  
         this.building = value;  
       }  
       /**  
        * Gets the value of the street property.  
        *   
        * @return  
        *   possible object is  
        *   {@link String }  
        *     
        */  
       public String getStreet() {  
         return street;  
       }  
       /**  
        * Sets the value of the street property.  
        *   
        * @param value  
        *   allowed object is  
        *   {@link String }  
        *     
        */  
       public void setStreet(String value) {  
         this.street = value;  
       }  
       /**  
        * Gets the value of the city property.  
        *   
        * @return  
        *   possible object is  
        *   {@link String }  
        *     
        */  
       public String getCity() {  
         return city;  
       }  
       /**  
        * Sets the value of the city property.  
        *   
        * @param value  
        *   allowed object is  
        *   {@link String }  
        *     
        */  
       public void setCity(String value) {  
         this.city = value;  
       }  
       /**  
        * Gets the value of the country property.  
        *   
        * @return  
        *   possible object is  
        *   {@link String }  
        *     
        */  
       public String getCountry() {  
         return country;  
       }  
       /**  
        * Sets the value of the country property.  
        *   
        * @param value  
        *   allowed object is  
        *   {@link String }  
        *     
        */  
       public void setCountry(String value) {  
         this.country = value;  
       }  
       /**  
        * Gets the value of the phoneMobile property.  
        *   
        * @return  
        *   possible object is  
        *   {@link String }  
        *     
        */  
       public String getPhoneMobile() {  
         return phoneMobile;  
       }  
       /**  
        * Sets the value of the phoneMobile property.  
        *   
        * @param value  
        *   allowed object is  
        *   {@link String }  
        *     
        */  
       public void setPhoneMobile(String value) {  
         this.phoneMobile = value;  
       }  
       /**  
        * Gets the value of the phoneLandLine property.  
        *   
        * @return  
        *   possible object is  
        *   {@link String }  
        *     
        */  
       public String getPhoneLandLine() {  
         return phoneLandLine;  
       }  
       /**  
        * Sets the value of the phoneLandLine property.  
        *   
        * @param value  
        *   allowed object is  
        *   {@link String }  
        *     
        */  
       public void setPhoneLandLine(String value) {  
         this.phoneLandLine = value;  
       }  
       /**  
        * Gets the value of the email property.  
        *   
        * @return  
        *   possible object is  
        *   {@link String }  
        *     
        */  
       public String getEmail() {  
         return email;  
       }  
       /**  
        * Sets the value of the email property.  
        *   
        * @param value  
        *   allowed object is  
        *   {@link String }  
        *     
        */  
       public void setEmail(String value) {  
         this.email = value;  
       }  
          @Override  
          public String toString() {  
               return "Address [doorNo=" + doorNo + ", building=" + building  
                         + ", street=" + street + ", city=" + city + ", country="  
                         + country + ", phoneMobile=" + phoneMobile + ", phoneLandLine="  
                         + phoneLandLine + ", email=" + email + "]";  
          }  
     }  
    
  9. 
     package com.live.order.domain;  
     public class FoodItem {  
       protected FoodItemType type;  
       protected String name;  
       protected double quantity;  
       /**  
        * Gets the value of the type property.  
        *   
        * @return  
        *   possible object is  
        *   {@link FoodItemType }  
        *     
        */  
       public FoodItemType getType() {  
         return type;  
       }  
       /**  
        * Sets the value of the type property.  
        *   
        * @param value  
        *   allowed object is  
        *   {@link FoodItemType }  
        *     
        */  
       public void setType(FoodItemType value) {  
         this.type = value;  
       }  
       /**  
        * Gets the value of the name property.  
        *   
        * @return  
        *   possible object is  
        *   {@link String }  
        *     
        */  
       public String getName() {  
         return name;  
       }  
       /**  
        * Sets the value of the name property.  
        *   
        * @param value  
        *   allowed object is  
        *   {@link String }  
        *     
        */  
       public void setName(String value) {  
         this.name = value;  
       }  
       /**  
        * Gets the value of the quantity property.  
        *   
        */  
       public double getQuantity() {  
         return quantity;  
       }  
       /**  
        * Sets the value of the quantity property.  
        *   
        */  
       public void setQuantity(double value) {  
         this.quantity = value;  
       }  
     }  
    
  10. 
     package com.live.order.domain;  
     public enum FoodItemType {  
       BEVERAGES("Beverages"),  
       COFFEE("Coffee"),  
       DESSERTS("Desserts"),  
       JUICES("Juices"),  
       MEALS("Meals"),  
       SNACKS("Snacks"),  
       STARTERS("Starters");  
       private final String value;  
       FoodItemType(String v) {  
         value = v;  
       }  
       public String value() {  
         return value;  
       }  
       public static FoodItemType fromValue(String v) {  
         for (FoodItemType c: FoodItemType.values()) {  
           if (c.value.equals(v)) {  
             return c;  
           }  
         }  
         throw new IllegalArgumentException(v.toString());  
       }  
     }  
    

Comments

Popular posts from this blog

defining functions clojure

How to retain the space of the td after hidding it in Jquery

Integrating Struts2 with Spring Security using Custom Login Form