You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-user@axis.apache.org by "AmburK, Punya" <pa...@epocrates.com> on 2006/08/05 03:34:41 UTC

Contract First approach - Axis2 and REST

Hi,
 
I'm trying to write web service using Axis2 in REST style.
I created the following service as specified in one of the articles on the net and deployed it to Axis2 and everything seems to work fine (code first approach).
--------------------------------------------------------------------------------

/**
 * The service implementation class
 */
 
import java.util.HashMap;
 
public class SimpleService {
 
 /**
  * The echo method which will be exposed as the 
  * echo operation of the web service
  */
 public String echo() {
  System.out.println("Echo test");
  return "Echo Successful";
 }
 
 public String echoString(String value) {
  System.out.println("value=" + value);
  StringBuffer sb = new StringBuffer("");
  sb.append("<USER>" + "\n" + "</USER>");
  return sb.toString();
 }
}
 
--------------------------------------------------------------------------------

The service works fine when i hit the following urls:
http://localhost:8080/axis2/rest/SimpleService <http://localhost:8080/axis2/rest/SimpleService/echo> /echo
http://localhost:8080/axis2/rest/SimpleService <http://localhost:8080/axis2/rest/SimpleService/echoString?param0=test> /echoString?param0=test
 
Then I tried "Contract first approach" by taking the wsdl that was generated for the above code and ran WSDL2Java utility to generate the service. I modified the skeleton service generated as shown below:
--------------------------------------------------------------------------------
    /**
     * SimpleServiceSkeleton.java
     *
     * This file was auto-generated from WSDL
     * by the Apache Axis2 version: SNAPSHOT Aug 03, 2006 (07:21:24 GMT+00:00)
     */
    package com.epocrates.webService;
    /**
     *  SimpleServiceSkeleton java skeleton for the axisService
     */
    public class SimpleServiceSkeleton{
     
   
        /**
         * Auto generated method signature
         
          
         */
        public  org.apache.ws.axis2.xsd.EchoResponse echo
                  (
          
          )
         
           {
  org.apache.ws.axis2.xsd.EchoResponse responseSt = new org.apache.ws.axis2.xsd.EchoResponse();
                //Todo fill this with the necessary business logic
                //throw new  java.lang.UnsupportedOperationException();
  responseSt.set_return("echo test successfull");
  return responseSt;

 
        }
     
   
        /**
         * Auto generated method signature
         
          * @param param2
         
         */
        public  org.apache.ws.axis2.xsd.EchoStringResponse echoString
                  (
          org.apache.ws.axis2.xsd.EchoString param2
          )
         
           {
  org.apache.ws.axis2.xsd.EchoStringResponse re = new org.apache.ws.axis2.xsd.EchoStringResponse();
                //Todo fill this with the necessary business logic
                //throw new  java.lang.UnsupportedOperationException();
  re.set_return("param0" + param2);
  return re;
        }
     
    }
    --------------------------------------------------------------------------------

Now accessing the URL  <http://localhost:8080/axis2/rest/SimpleService/echo> http://localhost:8080/axis2/rest/SimpleService/echo , throws the following exception:

java.lang.NoSuchMethodError: com.epocrates.webService.SimpleServiceSkeleton.echo()Lorg/apache/ws/axis2/xsd/EchoResponse;
com.epocrates.webService.SimpleServiceMessageReceiverInOut.invokeBusinessLogic(SimpleServiceMessageReceiverInOut.java:50)
org.apache.axis2.receivers.AbstractInOutSyncMessageReceiver.receive(AbstractInOutSyncMessageReceiver.java:39)
org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:492)
org.apache.axis2.transport.http.util.RESTUtil.invokeAxisEngine(RESTUtil.java:149)
org.apache.axis2.transport.http.util.RESTUtil.processGetRequest(RESTUtil.java:139)
.................................

and accessing  <http://localhost:8080/axis2/rest/SimpleService/echoString?param0=test> http://localhost:8080/axis2/rest/SimpleService/echoString?param0=test, throws the following exception:

org.apache.axis2.AxisFault: java.lang.UnsupportedOperationException: This element was not created in a manner to be switched; nested exception is: 
java.lang.RuntimeException: java.lang.UnsupportedOperationException: This element was not created in a manner to be switched; nested exception is: 
org.apache.axis2.AxisFault: java.lang.UnsupportedOperationException: This element was not created in a manner to be switched; nested exception is: 
java.lang.RuntimeException: java.lang.UnsupportedOperationException: This element was not created in a manner to be switched
org.apache.axis2.transport.http.util.RESTUtil.processGetRequest(RESTUtil.java:142)
org.apache.axis2.transport.http.AxisRESTServlet.doGet(AxisRESTServlet.java:36)
........................


Am I missing anything? Please help!!
 
Thanks,
Punya
 

Re: Contract First approach - Axis2 and REST

Posted by Eran Chinthaka <ch...@opensource.lk>.
Can you test this against the latest nightly build of Axis2?

-- Chinthaka


AmburK, Punya wrote:
> 
> Hi,
>  
> I'm trying to write web service using Axis2 in REST style.
> I created the following service as specified in one of the articles on
> the net and deployed it to Axis2 and everything seems to work fine (code
> first approach).
> --------------------------------------------------------------------------------
> 
> 
>     /**
>      * The service implementation class
>      */
>      
>     import java.util.HashMap;
>      
>     public class SimpleService {
>      
>      /**
>       * The echo method which will be exposed as the
>       * echo operation of the web service
>       */
>      public String echo() {
>       System.out.println("Echo test");
>       return "Echo Successful";
>      }
>      
>      public String echoString(String value) {
>       System.out.println("value=" + value);
>       StringBuffer sb = new StringBuffer("");
>       sb.append("<USER>" + "\n" + "</USER>");
>       return sb.toString();
>      }
>     }
>      
>     --------------------------------------------------------------------------------
> 
> 
> The service works fine when i hit the following urls:
> http://localhost:8080/axis2/rest/SimpleService /echo
> <http://localhost:8080/axis2/rest/SimpleService/echo>
> http://localhost:8080/axis2/rest/SimpleService /echoString?param0=test
> <http://localhost:8080/axis2/rest/SimpleService/echoString?param0=test>
>  
> Then I tried "Contract first approach" by taking the wsdl that was
> generated for the above code and ran WSDL2Java utility to generate the
> service. I modified the skeleton service generated as shown below:
> --------------------------------------------------------------------------------
>     /**
>      * SimpleServiceSkeleton.java
>      *
>      * This file was auto-generated from WSDL
>      * by the Apache Axis2 version: SNAPSHOT Aug 03, 2006 (07:21:24
> GMT+00:00)
>      */
>     package com.epocrates.webService;
>     /**
>      *  SimpleServiceSkeleton java skeleton for the axisService
>      */
>     public class SimpleServiceSkeleton{
>     
>   
>         /**
>          * Auto generated method signature
>         
>          
>          */
>         public  org.apache.ws.axis2.xsd.EchoResponse echo
>                   (
>          
>           )
>         
>            {
>   org.apache.ws.axis2.xsd.EchoResponse responseSt = new
> org.apache.ws.axis2.xsd.EchoResponse();
>                 //Todo fill this with the necessary business logic
>                 //throw new  java.lang.UnsupportedOperationException();
>   responseSt.set_return("echo test successfull");
>   return responseSt;
> 
>      
>             }
>         
>       
>             /**
>              * Auto generated method signature
>             
>               * @param param2
>             
>              */
>             public  org.apache.ws.axis2.xsd.EchoStringResponse echoString
>                       (
>               org.apache.ws.axis2.xsd.EchoString param2
>               )
>             
>                {
>       org.apache.ws.axis2.xsd.EchoStringResponse re = new
>     org.apache.ws.axis2.xsd.EchoStringResponse();
>                     //Todo fill this with the necessary business logic
>                     //throw new  java.lang.UnsupportedOperationException();
>       re.set_return("param0" + param2);
>       return re;
>             }
>         
>         }
>        
>     --------------------------------------------------------------------------------
> 
> 
> Now accessing the URL
> http://localhost:8080/axis2/rest/SimpleService/echo
> <http://localhost:8080/axis2/rest/SimpleService/echo>  , throws the
> following exception:
> 
>     java.lang.NoSuchMethodError:
>     com.epocrates.webService.SimpleServiceSkeleton.echo()Lorg/apache/ws/axis2/xsd/EchoResponse;
>     com.epocrates.webService.SimpleServiceMessageReceiverInOut.invokeBusinessLogic(SimpleServiceMessageReceiverInOut.java:50)
>     org.apache.axis2.receivers.AbstractInOutSyncMessageReceiver.receive(AbstractInOutSyncMessageReceiver.java:39)
>     org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:492)
>     org.apache.axis2.transport.http.util.RESTUtil.invokeAxisEngine(RESTUtil.java:149)
>     org.apache.axis2.transport.http.util.RESTUtil.processGetRequest(RESTUtil.java:139)
> 
>     ................................. 
> 
> and accessing
> http://localhost:8080/axis2/rest/SimpleService/echoString?param0=test
> <http://localhost:8080/axis2/rest/SimpleService/echoString?param0=test>
> , throws the following exception:
> 
>     org.apache.axis2.AxisFault: java.lang.UnsupportedOperationException:
>     This element was not created in a manner to be switched; nested
>     exception is:
>     java.lang.RuntimeException: java.lang.UnsupportedOperationException:
>     This element was not created in a manner to be switched; nested
>     exception is:
>     org.apache.axis2.AxisFault: java.lang.UnsupportedOperationException:
>     This element was not created in a manner to be switched; nested
>     exception is:
>     java.lang.RuntimeException: java.lang.UnsupportedOperationException:
>     This element was not created in a manner to be switched
>     org.apache.axis2.transport.http.util.RESTUtil.processGetRequest(RESTUtil.java:142)
>     org.apache.axis2.transport.http.AxisRESTServlet.doGet(AxisRESTServlet.java:36)
>     ........................
> 
> Am I missing anything? Please help!!
>  
> Thanks,
> Punya
>