You are viewing a plain text version of this content. The canonical link for it is here.
Posted to soap-dev@xml.apache.org by gd...@apache.org on 2001/05/11 21:06:38 UTC

cvs commit: xml-soap/java/samples/interop Data.java DataSerializer.java DeploymentDescriptor.xml EchoTestClient.java EchoTestService.java

gdaniels    01/05/11 12:06:37

  Added:       java/samples/interop Data.java DataSerializer.java
                        DeploymentDescriptor.xml EchoTestClient.java
                        EchoTestService.java
  Log:
  Check in implementation of the interop echo service and client.
  
  Revision  Changes    Path
  1.1                  xml-soap/java/samples/interop/Data.java
  
  Index: Data.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 2001 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "SOAP" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  package samples.interop;
  
  class Data
  {
    Integer myInt;
    String myString;
    Float myFloat;
    
    public Data()
    {
    }
    
    public Data(int i, String s, float f)
    {
      myInt = new Integer(i);
      myString = s;
      myFloat = new Float(f);
    }
    
    public String toString()
    {
      return "Data[MyInt=" + myInt + ", MyString='" + myString + "', myFloat=" + myFloat + "]";
    }
    
    /**
     * Equality comparison.  
     */
    public boolean equals(Object object) {
      if (!(object instanceof Data)) return false;
  
      Data that= (Data) object;
  
      if (!this.myInt.equals(that.myInt)) return false;
      if (!this.myFloat.equals(that.myFloat)) return false;
  
      if (this.myString == null) {
        if (that.myString != null) return false;
      } else {
        if (!this.myString.equals(that.myString)) return false;
      }
  
      return true;
    };
  }
  
  
  
  1.1                  xml-soap/java/samples/interop/DataSerializer.java
  
  Index: DataSerializer.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 2001 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "SOAP" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  package samples.interop;
  
  import java.util.Vector;
  import org.apache.soap.*;
  import org.apache.soap.encoding.SOAPMappingRegistry;
  import org.apache.soap.encoding.soapenc.*;
  import org.apache.soap.rpc.*;
  import org.apache.soap.messaging.*;
  import java.net.URL;
  import org.apache.soap.util.xml.*;
  import java.io.*;
  import org.w3c.dom.*;
  import org.apache.soap.util.*;
  import java.lang.reflect.*;
  	
  public class DataSerializer implements Serializer, Deserializer
  {
    public void marshall(String inScopeEncStyle, Class javaType, Object src,
                         Object context, Writer sink, NSStack nsStack,
                         XMLJavaMappingRegistry xjmr, SOAPContext ctx)
      throws IllegalArgumentException, IOException
    {
      if(!javaType.equals(Data.class))
      {
        throw new IllegalArgumentException("Can only serialize Data instances");
      }
      
      Data data = (Data)src;
      
      nsStack.pushScope();
      if(src!=null)
      {
        SoapEncUtils.generateStructureHeader(inScopeEncStyle,
                                             javaType,
                                             context,
                                             sink,
                                             nsStack,xjmr);
  
        sink.write(StringUtils.lineSeparator);
        
        xjmr.marshall(inScopeEncStyle, Integer.class, data.myInt, "varInt",
                      sink, nsStack, ctx);
        sink.write(StringUtils.lineSeparator);
        xjmr.marshall(inScopeEncStyle, Float.class, data.myFloat, "varFloat",
                      sink, nsStack, ctx);
        sink.write(StringUtils.lineSeparator);
        xjmr.marshall(inScopeEncStyle, String.class, data.myString, "varString",
                      sink, nsStack, ctx);
        sink.write(StringUtils.lineSeparator);
        
        sink.write("</" + context + '>');
      }
      else
      {
        SoapEncUtils.generateNullStructure(inScopeEncStyle,
                                           javaType,
                                           context,
                                           sink,
                                           nsStack,xjmr);
      }
      nsStack.popScope();
    }
    
    public Bean unmarshall(String inScopeEncStyle, QName elementType, Node src,
                           XMLJavaMappingRegistry xjmr, SOAPContext ctx)
      throws IllegalArgumentException
    {
      Element root = (Element)src;
      String name = root.getTagName();
  
      if (SoapEncUtils.isNull(root))
      {
        return new Bean(Data.class, null);
      }
      
      Data ret = new Data();
      NodeList list = root.getElementsByTagName("varInt");
      if (list == null || list.getLength() == 0) {
        throw new IllegalArgumentException("No 'varInt' Element (deserializing Data struct)");
      }
      Element el = (Element)list.item(0);
      ret.myInt = new Integer(DOMUtils.getChildCharacterData(el));
      
      list = root.getElementsByTagName("varFloat");
      if (list == null || list.getLength() == 0) {
        throw new IllegalArgumentException("No 'varFloat' Element (deserializing Data struct)");
      }
      el = (Element)list.item(0);
      ret.myFloat = new Float(DOMUtils.getChildCharacterData(el));
      
      list = root.getElementsByTagName("varString");
      if (list == null || list.getLength() == 0) {
        throw new IllegalArgumentException("No 'varString' Element (deserializing Data struct)");
      }
      el = (Element)list.item(0);
      ret.myString = ((Text)el.getFirstChild()).getData();
      
      return new Bean(Data.class, ret);
    }
  }
  
  
  
  1.1                  xml-soap/java/samples/interop/DeploymentDescriptor.xml
  
  Index: DeploymentDescriptor.xml
  ===================================================================
  <isd:service xmlns:isd="http://xml.apache.org/xml-soap/deployment"
               id="http://soapinterop.org/">
    <isd:provider type="java"
                  scope="Application"
                  methods="nop echoInteger echoString echoFloat echoStruct echoIntegerArray echoFloatArray echoStringArray echoStructArray">
      <isd:java class="samples.interop.EchoTestService" static="false"/>
    </isd:provider>
  
    <isd:faultListener>org.apache.soap.server.DOMFaultListener</isd:faultListener>
  
    <isd:mappings>
      <isd:map encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
               xmlns:x="" qname="x:inputInteger"
               xml2JavaClassName="org.apache.soap.encoding.soapenc.IntDeserializer"/>
      <isd:map encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
               xmlns:x="" qname="x:inputFloat"
               xml2JavaClassName="org.apache.soap.encoding.soapenc.FloatDeserializer"/>
      <isd:map encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
               xmlns:x="" qname="x:inputString"
               xml2JavaClassName="org.apache.soap.encoding.soapenc.StringDeserializer"/>
      <isd:map encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
               xmlns:x="" qname="x:inputStruct"
               xml2JavaClassName="samples.interop.DataSerializer"/>
      <isd:map encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
               xmlns:x="" qname="x:inputIntegerArray"
               xml2JavaClassName="org.apache.soap.encoding.soapenc.ArraySerializer"/>
      <isd:map encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
               xmlns:x="" qname="x:inputFloatArray"
               xml2JavaClassName="org.apache.soap.encoding.soapenc.ArraySerializer"/>
      <isd:map encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
               xmlns:x="" qname="x:inputStringArray"
               xml2JavaClassName="org.apache.soap.encoding.soapenc.ArraySerializer"/>
      <isd:map encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
               xmlns:x="" qname="x:inputStructArray"
               xml2JavaClassName="org.apache.soap.encoding.soapenc.ArraySerializer"/>
  
      <isd:map encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
               xmlns:x="http://soapinterop.org/xsd" qname="x:SOAPStruct"
               javaType="samples.interop.Data"
               java2XMLClassName="samples.interop.DataSerializer"
               xml2JavaClassName="samples.interop.DataSerializer"/>
    </isd:mappings>    
  </isd:service>
  
  
  
  1.1                  xml-soap/java/samples/interop/EchoTestClient.java
  
  Index: EchoTestClient.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 2001 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "SOAP" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  package samples.interop;
  
  import java.util.Vector;
  import org.apache.soap.*;
  import org.apache.soap.encoding.SOAPMappingRegistry;
  import org.apache.soap.encoding.soapenc.*;
  import org.apache.soap.rpc.*;
  import org.apache.soap.messaging.*;
  import java.net.URL;
  import org.apache.soap.util.xml.*;
  import java.io.*;
  import org.w3c.dom.*;
  import org.apache.soap.util.*;
  import java.lang.reflect.*;
  
  /** A quick-and-dirty client for the Interop echo test services as defined
   * at http://www.xmethods.net/ilab.
   * 
   * Defaults to the Apache endpoint, but you can point it somewhere else via
   * the command line:
   * 
   *    EchoTestClient http://some.other.place/
   * 
   * DOES NOT SUPPORT DIFFERENT SOAPACTION URIS YET.
   * 
   * @author Glen Daniels (gdaniels@macromedia.com)
   */
  public class EchoTestClient
  {
    SOAPMappingRegistry smr = new SOAPMappingRegistry(Constants.NS_URI_CURRENT_SCHEMA_XSD);
  
    public static final String DEFAULT_URL = "http://nagoya.apache.org:5089/soap/servlet/rpcrouter";
    public static final String ACTION_URI = "http://soapinterop.org/";
    public static final String OBJECT_URI = "http://soapinterop.org/xsd";
    public Header header = null;
    
    public static void main(String args[])
    {
      URL url = null;
  
      try {
        if (args.length > 0) {
          url = new URL(args[0]);
        } else {
          url = new URL(DEFAULT_URL);
        }
      } catch (Exception e) {
        e.printStackTrace();
      }
      
      EchoTestClient eTest = new EchoTestClient();
      eTest.doWork(url);
    }
  
    private static boolean equals(Object obj1, Object obj2) {
      if (obj1 == null) return (obj2 == null);
      if (obj1.equals(obj2)) return true;
      if (!obj2.getClass().isArray()) return false;
      if (!obj1.getClass().isArray()) return false;
      if (Array.getLength(obj1) != Array.getLength(obj2)) return false;
      for (int i=0; i<Array.getLength(obj1); i++)
        if (!equals(Array.get(obj1,i),Array.get(obj2,i))) return false;
      return true;
    }
    
    public void doWork(URL url)
    {
      IntDeserializer intDser = new IntDeserializer();
      FloatDeserializer floatDser = new FloatDeserializer();
      StringDeserializer stringDser = new StringDeserializer();
      ArraySerializer arraySer = new ArraySerializer();
      DataSerializer dataSer = new DataSerializer();
      smr.mapTypes(Constants.NS_URI_SOAP_ENC, new QName(OBJECT_URI, "SOAPStruct"), Data.class, dataSer, dataSer);
  
      Integer i = new Integer(5);
      Parameter p = new Parameter("inputInteger", Integer.class, i, null);
      smr.mapTypes(Constants.NS_URI_SOAP_ENC, new QName("", "Return"), null, null, intDser);
      doCall(url, "echoInteger", p);
      
      p = new Parameter("inputFloat", Float.class, new Float(55.5), null);
      smr.mapTypes(Constants.NS_URI_SOAP_ENC, new QName("", "Return"), null, null, floatDser);
      doCall(url, "echoFloat", p);
      
      p = new Parameter("inputString", String.class, "Hi there!", null);
      smr.mapTypes(Constants.NS_URI_SOAP_ENC, new QName("", "Return"), null, null, stringDser);
      doCall(url, "echoString", p);
      
      p = new Parameter("inputStruct", Data.class, new Data(5, "Hola, baby", (float)10.0), null);
      smr.mapTypes(Constants.NS_URI_SOAP_ENC, new QName("", "Return"), null, null, dataSer);
      doCall(url, "echoStruct", p);
      
      p = new Parameter("inputIntegerArray", Integer[].class, new Integer[]{
                        new Integer(5),
                        new Integer(4),
                        new Integer(3),
                        new Integer(2),
                        new Integer(1)}, null);
      smr.mapTypes(Constants.NS_URI_SOAP_ENC, new QName("", "Return"), null, null, arraySer);
      doCall(url, "echoIntegerArray", p);		
  
      p = new Parameter("inputFloatArray", Float[].class, new Float[]{
                        new Float(5.5),
                        new Float(4.4),
                        new Float(3.3),
                        new Float(2.2),
                        new Float(1.1)}, null);
      smr.mapTypes(Constants.NS_URI_SOAP_ENC, new QName("", "Return"), null, null, arraySer);
      doCall(url, "echoFloatArray", p);		
  
      p = new Parameter("inputStringArray", String[].class, new String[]{
                        "First",
                        "Second",
                        "Fifth (just kidding :))",
                        "Fourth",
                        "Last"}, null);
      smr.mapTypes(Constants.NS_URI_SOAP_ENC, new QName("", "Return"), null, null, arraySer);
      doCall(url, "echoStringArray", p);		
  
      p = new Parameter("inputStructArray", Data[].class, new Data[]{
                        new Data(5, "cinqo", new Float("5.55555").floatValue()),
                        new Data(4, "quattro", (float)4.4444),
                        new Data(3, "tres", (float)3.333),
                        new Data(2, "duet", (float)2.22),
                        new Data(1, "un", (float)1.1)}, null);
      smr.mapTypes(Constants.NS_URI_SOAP_ENC, new QName("", "Return"), null, null, arraySer);
      doCall(url, "echoStructArray", p);		
    }
    
    public void doCall(URL url, String methodName, Parameter param)
    {
      try {
        Call call = new Call();
        Vector params = new Vector();
        params.addElement(param);
        call.setSOAPMappingRegistry(smr);
        call.setTargetObjectURI(ACTION_URI);
        call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);
        call.setMethodName(methodName);
        call.setParams(params);
        if (header != null)
          call.setHeader(header);
        
        String soapAction = ACTION_URI;
        if (true) {
          soapAction = soapAction + methodName;
        }
        
        Response resp = call.invoke(url, soapAction);
        
        // check response 
        if (!resp.generatedFault()) {
          Parameter ret = resp.getReturnValue();
          Object output = ret.getValue();
          Object input = param.getValue();
  
          if (equals(input,output)) {
            System.out.println(methodName + "\t OK");
          } else {
            System.out.println(methodName + "\t FAIL: " + output);
          }
        }
        else {
          Fault fault = resp.getFault ();
          System.err.println (methodName + " generated fault: ");
          System.out.println ("  Fault Code   = " + fault.getFaultCode());  
          System.out.println ("  Fault String = " + fault.getFaultString());
        }
        
      } catch (Exception e) {
        e.printStackTrace();
      }
    }
  }
  
  
  1.1                  xml-soap/java/samples/interop/EchoTestService.java
  
  Index: EchoTestService.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 2001 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "SOAP" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  package samples.interop;
  
  /** An implementation of the interop echo service as defined at
   * http://www.xmethods.net/ilab.
   * 
   * @author Glen Daniels (gdaniels@macromedia.com)
   */
  public class EchoTestService
  {
    public void nop()
    {
    }
    
    public int echoInteger(int i)
    {
      return i;
    }
  
    public float echoFloat(float f)
    {
      return f;
    }
    
    public String echoString(String str)
    {
      return str;
    }
    
    public Data echoStruct(Data data)
    {
      return data;
    }
    
    public int [] echoIntegerArray(int [] ii)
    {
      return ii;
    }
    
    public float [] echoFloatArray(float [] ff)
    {
      return ff;
    }
    
    public String [] echoStringArray(String [] ss)
    {
      return ss;
    }
    
    public Data [] echoStructArray(Data [] ds)
    {
      return ds;
    }
  }