You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by di...@apache.org on 2003/07/09 20:50:22 UTC

cvs commit: xml-axis/java/test/wsdl/rpcParams RpcParamsBindingImpl.java RpcParamsBindingStub.java RpcParamsServiceTestCase.java build.xml deploy.wsdd readme.txt rpcParams.wsdl

dims        2003/07/09 11:50:22

  Added:       java/test/wsdl/rpcParams RpcParamsBindingImpl.java
                        RpcParamsBindingStub.java
                        RpcParamsServiceTestCase.java build.xml deploy.wsdd
                        readme.txt rpcParams.wsdl
  Log:
  Test case for Bug 20930 - Input parameter resolution by QName always fails in 1.1 final
  from dave_marquard@forgent.com
  
  Revision  Changes    Path
  1.1                  xml-axis/java/test/wsdl/rpcParams/RpcParamsBindingImpl.java
  
  Index: RpcParamsBindingImpl.java
  ===================================================================
  /**
   * RpcParamsBindingImpl.java
   *
   * This file was auto-generated from WSDL
   * by the Apache Axis WSDL2Java emitter.
   */
  
  package test.wsdl.rpcParams;
  
  public class RpcParamsBindingImpl implements RpcParamsTest {
      /**
       * Just return a struct with the first and second fields
       * filled out with the arguments.
       */ 
      public EchoStruct echo(String first, String second) {
          final EchoStruct result = new EchoStruct();
          result.setFirst(first);
          result.setSecond(second);
          return result;
      }
  }
  
  
  
  1.1                  xml-axis/java/test/wsdl/rpcParams/RpcParamsBindingStub.java
  
  Index: RpcParamsBindingStub.java
  ===================================================================
  /**
   * RpcParamsBindingStub.java
   *
   * This file was auto-generated from WSDL
   * by the Apache Axis WSDL2Java emitter.
   */
  
  package test.wsdl.rpcParams;
  
  import java.util.Enumeration;
  import java.util.Vector;
  import java.util.List;
  import java.util.ArrayList;
  import java.rmi.RemoteException;
  import javax.xml.namespace.QName;
  
  import org.apache.axis.description.OperationDesc;
  import org.apache.axis.description.ParameterDesc;
  import org.apache.axis.client.Stub;
  
  public class RpcParamsBindingStub extends Stub implements RpcParamsTest {
      private Vector cachedSerClasses = new Vector();
      private Vector cachedSerQNames = new Vector();
      private Vector cachedSerFactories = new Vector();
      private Vector cachedDeserFactories = new Vector();
  
      public RpcParamsBindingStub() throws org.apache.axis.AxisFault {
           this(null);
      }
  
      public RpcParamsBindingStub(java.net.URL endpointURL, javax.xml.rpc.Service service) throws org.apache.axis.AxisFault {
           this(service);
           super.cachedEndpoint = endpointURL;
      }
  
      public RpcParamsBindingStub(javax.xml.rpc.Service service) throws org.apache.axis.AxisFault {
          if (service == null) {
              super.service = new org.apache.axis.client.Service();
          } else {
              super.service = service;
          }
              Class cls;
              QName qName;
              Class beansf = org.apache.axis.encoding.ser.BeanSerializerFactory.class;
              Class beandf = org.apache.axis.encoding.ser.BeanDeserializerFactory.class;
              qName = new QName("urn:rpcParams.wsdl.test", "EchoStruct");
              cachedSerQNames.add(qName);
              cls = EchoStruct.class;
              cachedSerClasses.add(cls);
              cachedSerFactories.add(beansf);
              cachedDeserFactories.add(beandf);
  
      }
  
      private org.apache.axis.client.Call createCall() throws RemoteException {
          try {
              org.apache.axis.client.Call _call =
                      (org.apache.axis.client.Call) super.service.createCall();
              if (super.maintainSessionSet) {
                  _call.setMaintainSession(super.maintainSession);
              }
              if (super.cachedUsername != null) {
                  _call.setUsername(super.cachedUsername);
              }
              if (super.cachedPassword != null) {
                  _call.setPassword(super.cachedPassword);
              }
              if (super.cachedEndpoint != null) {
                  _call.setTargetEndpointAddress(super.cachedEndpoint);
              }
              if (super.cachedTimeout != null) {
                  _call.setTimeout(super.cachedTimeout);
              }
              if (super.cachedPortName != null) {
                  _call.setPortName(super.cachedPortName);
              }
              Enumeration keys = super.cachedProperties.keys();
              while (keys.hasMoreElements()) {
                  String key = (String) keys.nextElement();
                  _call.setProperty(key, super.cachedProperties.get(key));
              }
              // All the type mapping information is registered
              // when the first call is made.
              // The type mapping information is actually registered in
              // the TypeMappingRegistry of the service, which
              // is the reason why registration is only needed for the first call.
              synchronized (this) {
                  if (firstCall()) {
                      // must set encoding style before registering serializers
                      _call.setSOAPVersion(org.apache.axis.soap.SOAPConstants.SOAP11_CONSTANTS);
                      _call.setEncodingStyle(org.apache.axis.Constants.URI_SOAP11_ENC);
                      for (int i = 0; i < cachedSerFactories.size(); ++i) {
                          Class cls = (Class) cachedSerClasses.get(i);
                          QName qName =
                                  (QName) cachedSerQNames.get(i);
                          Class sf = (Class)
                                   cachedSerFactories.get(i);
                          Class df = (Class)
                                   cachedDeserFactories.get(i);
                          _call.registerTypeMapping(cls, qName, sf, df, false);
                      }
                  }
              }
              return _call;
          }
          catch (Throwable t) {
              throw new org.apache.axis.AxisFault("Failure trying to get the Call object", t);
          }
      }
  
      /**
       * Send the given request to the server, ommitting any null parameters.
       */
      public EchoStruct echo(String first, String second) throws RemoteException {
          EchoStruct result;
          if (super.cachedEndpoint == null) {
              throw new org.apache.axis.NoEndPointException();
          }
  
          // create the operation... omit any null parameters
          OperationDesc operation = new OperationDesc();
          operation.setName("echo");
          if (first != null)
              operation.addParameter(new QName("", "first"), new QName("http://www.w3.org/2001/XMLSchema", "string"), String.class, ParameterDesc.IN, false, false);
          if (second != null)
              operation.addParameter(new QName("", "second"), new QName("http://www.w3.org/2001/XMLSchema", "string"), String.class, ParameterDesc.IN, false, false);
          operation.setReturnType(new QName("urn:rpcParams.wsdl.test", "EchoStruct"));
          operation.setReturnClass(EchoStruct.class);
          operation.setReturnQName(new QName("", "echoReturn"));
          operation.setStyle(org.apache.axis.enum.Style.RPC);
          operation.setUse(org.apache.axis.enum.Use.ENCODED);
  
          org.apache.axis.client.Call _call = createCall();
          _call.setOperation(operation);
          _call.setUseSOAPAction(true);
          _call.setSOAPActionURI("");
          _call.setSOAPVersion(org.apache.axis.soap.SOAPConstants.SOAP11_CONSTANTS);
          _call.setOperationName(new QName("urn:rpcParams.wsdl.test", "echo"));
  
          setRequestHeaders(_call);
          setAttachments(_call);
  
          // add the params we're actually going to send, again ommitting nulls
          List params = new ArrayList(2);
          if (first != null)
              params.add(first);
          if (second != null)
              params.add(second);
  
          Object _resp = _call.invoke(params.toArray());
  
          if (_resp instanceof RemoteException) {
              throw (RemoteException)_resp;
          }
          else {
              getResponseHeaders(_call);
              extractAttachments(_call);
              try {
                  result = (EchoStruct) _resp;
              } catch (Exception _exception) {
                  result = (EchoStruct) org.apache.axis.utils.JavaUtils.convert(_resp, EchoStruct.class);
              }
          }
          return result;
      }
  
      /**
       * The same as echo, but reverse the order of parameters we send.
       */
      public EchoStruct echoReverse(String first, String second) throws RemoteException {
          EchoStruct result;
          if (super.cachedEndpoint == null) {
              throw new org.apache.axis.NoEndPointException();
          }
  
          // create the operation... omit any null parameters
          OperationDesc operation = new OperationDesc();
          operation.setName("echo");
          if (second != null)
              operation.addParameter(new QName("", "second"), new QName("http://www.w3.org/2001/XMLSchema", "string"), String.class, ParameterDesc.IN, false, false);
          if (first != null)
              operation.addParameter(new QName("", "first"), new QName("http://www.w3.org/2001/XMLSchema", "string"), String.class, ParameterDesc.IN, false, false);
          operation.setReturnType(new QName("urn:rpcParams.wsdl.test", "EchoStruct"));
          operation.setReturnClass(EchoStruct.class);
          operation.setReturnQName(new QName("", "echoReturn"));
          operation.setStyle(org.apache.axis.enum.Style.RPC);
          operation.setUse(org.apache.axis.enum.Use.ENCODED);
  
          org.apache.axis.client.Call _call = createCall();
          _call.setOperation(operation);
          _call.setUseSOAPAction(true);
          _call.setSOAPActionURI("");
          _call.setSOAPVersion(org.apache.axis.soap.SOAPConstants.SOAP11_CONSTANTS);
          _call.setOperationName(new QName("urn:rpcParams.wsdl.test", "echo"));
  
          setRequestHeaders(_call);
          setAttachments(_call);
  
          // add the params we're actually going to send, again ommitting nulls
          List params = new ArrayList(2);
          if (second != null)
              params.add(second);
          if (first != null)
              params.add(first);
  
          Object _resp = _call.invoke(params.toArray());
  
          if (_resp instanceof RemoteException) {
              throw (RemoteException)_resp;
          }
          else {
              getResponseHeaders(_call);
              extractAttachments(_call);
              try {
                  result = (EchoStruct) _resp;
              } catch (Exception _exception) {
                  result = (EchoStruct) org.apache.axis.utils.JavaUtils.convert(_resp, EchoStruct.class);
              }
          }
          return result;
      }
  
  }
  
  
  
  1.1                  xml-axis/java/test/wsdl/rpcParams/RpcParamsServiceTestCase.java
  
  Index: RpcParamsServiceTestCase.java
  ===================================================================
  /**
   * RpcParamsServiceTestCase.java
   *
   * This file was auto-generated from WSDL
   * by the Apache Axis WSDL2Java emitter.
   */
  
  package test.wsdl.rpcParams;
  
  import javax.xml.rpc.ServiceException;
  
  import junit.framework.TestCase;
  
  public class RpcParamsServiceTestCase extends TestCase {
      public RpcParamsServiceTestCase(String name) {
          super(name);
      }
  
      /**
       * Send parameters in the order that they are specified in
       * the wsdl. Also omits null parameters.
       */
      public void testEcho() throws Exception {
          RpcParamsBindingStub binding = getBinding();
  
          EchoStruct result;
          // test sending both
          result = binding.echo("first", "second");
          assertNotNull("returned struct is null", result);
          assertEquals("first parameter marshalled wrong when both sent", "first", result.getFirst());
          assertEquals("second parameter marshalled wrong when both sent", "second", result.getSecond());
  
          // test ommitting the first, since it's null
          result = binding.echo(null, "second");
          assertNotNull("returned struct is null", result);
          assertNull("first parameter should be null", result.getFirst());
          assertEquals("second parameter marshalled wrong first is null", "second", result.getSecond());
  
          // test ommitting the second, since it's null
          result = binding.echo("first", null);
          assertNotNull("returned struct is null", result);
          assertEquals("first parameter marshalled wrong when second is null", "first", result.getFirst());
          assertNull("second parameter should be null", result.getSecond());
  
          // test ommitting both, since they're null
          result = binding.echo(null, null);
          assertNotNull("returned struct is null", result);
          assertNull("first parameter should be null", result.getFirst());
          assertNull("second parameter should be null", result.getSecond());
      }
  
      /**
       * Send parameters in the reverse order that they are specified in
       * the wsdl. Also omits null parameters.
       */
      public void testEchoReverse() throws Exception {
          RpcParamsBindingStub binding = getBinding();
  
          EchoStruct result;
          // test sending both
          result = binding.echoReverse("first", "second");
          assertNotNull("returned struct is null", result);
          assertEquals("first parameter marshalled wrong when both sent", "first", result.getFirst());
          assertEquals("second parameter marshalled wrong when both sent", "second", result.getSecond());
  
          // test ommitting the first, since it's null
          result = binding.echoReverse(null, "second");
          assertNotNull("returned struct is null", result);
          assertNull("first parameter should be null", result.getFirst());
          assertEquals("second parameter marshalled wrong first is null", "second", result.getSecond());
  
          // test ommitting the second, since it's null
          result = binding.echoReverse("first", null);
          assertNotNull("returned struct is null", result);
          assertEquals("first parameter marshalled wrong when second is null", "first", result.getFirst());
          assertNull("second parameter should be null", result.getSecond());
  
          // test ommitting both, since they're null
          result = binding.echoReverse(null, null);
          assertNotNull("returned struct is null", result);
          assertNull("first parameter should be null", result.getFirst());
          assertNull("second parameter should be null", result.getSecond());
      }
  
      private RpcParamsBindingStub getBinding() {
          RpcParamsBindingStub binding = null;
          try {
              binding = (RpcParamsBindingStub) new RpcParamsServiceLocator().getRpcParams();
          }
          catch (ServiceException jre) {
              if(jre.getLinkedCause()!=null)
                  jre.getLinkedCause().printStackTrace();
              fail("JAX-RPC ServiceException caught: " + jre);
          }
          assertNotNull("binding is null", binding);
  
          // Time out after a minute
          binding.setTimeout(60000);
          return binding;
      }
  }
  
  
  
  1.1                  xml-axis/java/test/wsdl/rpcParams/build.xml
  
  Index: build.xml
  ===================================================================
  <?xml version="1.0" ?>
  <!DOCTYPE project [
          <!ENTITY properties SYSTEM "file:../../../xmls/properties.xml">
          <!ENTITY paths  SYSTEM "file:../../../xmls/path_refs.xml">
          <!ENTITY taskdefs SYSTEM "file:../../../xmls/taskdefs.xml">
          <!ENTITY taskdefs_post_compile SYSTEM "file:../../../xmls/taskdefs_post_compile.xml">
          <!ENTITY targets SYSTEM "file:../../../xmls/targets.xml">
  ]>
  
  <!-- ===================================================================
  <description>
     Test/Sample Component file for Axis
  
  Notes:
     This is a build file for use with the Jakarta Ant build tool.
  
  Prerequisites:
  
     jakarta-ant from http://jakarta.apache.org
  
  Build Instructions:
     To compile
          ant compile
     To execute
          ant run
  
  Author:
    Matt Seibert mseibert@us.ibm.com
  
  Copyright:
    Copyright (c) 2002-2003 Apache Software Foundation.
  </description>
  ==================================================================== -->
  
  <project default="compile">
  
      <property name="axis.home" location="../../.."/>
      <property name="componentName" value="test/wsdl/rpcParams"/>
      &properties;
      &paths;
      &taskdefs;
      &taskdefs_post_compile;
      &targets;
  
      <target name="clean">
          <echo message="Removing ${build.dir}/classes/${componentName} and ${build.dir}/work/${componentName}"/>
          <delete dir="${build.dir}/classes/${componentName}"/>
          <delete dir="${build.dir}/work/${componentName}"/>
      </target>
  
      <target name="copy" depends="setenv"/>
  
      <target name="compile" depends="copy">
          <echo message="Compiling test.wsdl.rpcParams"/>
          <!-- This tests rpcParams.  -->
          <wsdl2java url="${axis.home}/test/wsdl/rpcParams/rpcParams.wsdl"
              output="${axis.home}/build/work"
              serverSide="yes"
              testcase="yes">
          </wsdl2java>
  
          <copy todir="${build.dir}/work/test/wsdl/rpcParams" overwrite="yes">
              <fileset dir="${axis.home}/test/wsdl/rpcParams">
                  <include name="*TestCase.java"/>
                  <include name="*Impl.java"/>
                  <include name="*Stub.java"/>
                  <include name="*.wsdd"/>
              </fileset>
          </copy>
  
          <javac srcdir="${build.dir}/work" destdir="${build.dest}" fork="${javac.fork}"
              debug="${debug}">
              <classpath refid="classpath"/>
              <include name="test/wsdl/rpcParams/*.java"/>
          </javac>
  
      </target>
  
      <target name="run">
          <antcall target="execute-Component"/>
      </target>
  
  </project>
  
  
  
  1.1                  xml-axis/java/test/wsdl/rpcParams/deploy.wsdd
  
  Index: deploy.wsdd
  ===================================================================
  <!-- Use this file to deploy some handlers/chains and services      -->
  <!-- Two ways to do this:                                           -->
  <!--   java org.apache.axis.client.AdminClient deploy.wsdd          -->
  <!--      after the axis server is running                          -->
  <!-- or                                                             -->
  <!--   java org.apache.axis.utils.Admin client|server deploy.wsdd   -->
  <!--      from the same directory that the Axis engine runs         -->
  
  <deployment
      xmlns="http://xml.apache.org/axis/wsdd/"
      xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
  
    <!-- Services from rpcParamsService WSDL service -->
  
    <service name="RpcParams" provider="java:RPC" style="rpc" use="encoded">
        <parameter name="wsdlTargetNamespace" value="urn:rpcParams.wsdl.test"/>
        <parameter name="wsdlServiceElement" value="rpcParamsService"/>
        <parameter name="wsdlServicePort" value="RpcParams"/>
        <parameter name="className" value="test.wsdl.rpcParams.RpcParamsBindingImpl"/>
        <parameter name="allowedMethods" value="echo"/>
  
        <!--
          NOTE: it is important to *not* include metadata about the service's operation
          here in order to reproduce bug the bug in ServiceDesc mentioned in
          http://nagoya.apache.org/bugzilla/show_bug.cgi?id=20930.
        -->
  
        <typeMapping
          xmlns:ns="urn:rpcParams.wsdl.test"
          qname="ns:EchoStruct"
          type="java:test.wsdl.rpcParams.EchoStruct"
          serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
          deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
          encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
        />
    </service>
  </deployment>
  
  
  
  1.1                  xml-axis/java/test/wsdl/rpcParams/readme.txt
  
  Index: readme.txt
  ===================================================================
  This is a simple test case to test parameter handling in an RPC/Encoded
  web service. It tests two scenarios:
    1) Null parameters to an operation may be ommitted.
    2) Parameters to an operation may be sent in any order.
  
  To accomplish this, a custom binding stub implementation is provided, since
  the default wsdl2Java versions at the time of writing never reorder or omit
  null parameters.
  
  The test case was originally created to validate bug
  http://nagoya.apache.org/bugzilla/show_bug.cgi?id=20930.
  
   - dave_marquard@forgent.com
  
  
  1.1                  xml-axis/java/test/wsdl/rpcParams/rpcParams.wsdl
  
  Index: rpcParams.wsdl
  ===================================================================
  <?xml version="1.0" ?>
  
  <definitions
      name="rpcParams test"
      targetNamespace="urn:rpcParams.wsdl.test"
      xmlns:tns="urn:rpcParams.wsdl.test"
      xmlns:xsd="http://www.w3.org/2001/XMLSchema"
      xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
      xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
      xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
      xmlns="http://schemas.xmlsoap.org/wsdl/">
  
      <types>
          <schema xmlns="http://www.w3.org/2001/XMLSchema">
              <import namespace="http://schemas.xmlsoap.org/soap/encoding/" />
              <complexType name="EchoStruct">
                  <sequence>
                      <element name="first" nillable="true" type="xsd:string" />
                      <element name="second" nillable="true" type="xsd:string" />
                  </sequence>
              </complexType>
          </schema>
      </types>
  
    <!-- message declns -->
    <message name="echoRequest">
        <part name="first" type="xsd:string"/>
        <part name="second" type="xsd:string"/>
    </message>
  
    <message name="echoResponse">
        <part name="echoReturn" type="tns:EchoStruct"/>
    </message>
  
    <!-- port type declns -->
    <portType name="rpcParamsTest">
      <operation name="echo" parameterOrder="first second">
        <input message="tns:echoRequest" name="echoRequest"/>
        <output message="tns:echoResponse" name="echoResponse"/>
      </operation>
    </portType>
  
    <!-- binding declns -->
    <binding name="rpcParamsBinding" type="tns:rpcParamsTest">
      <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
      <operation name="echo">
        <soap:operation soapAction=""/>
        <input name="echoRequest">
          <soap:body
              use="encoded"
              namespace="urn:rpcParams.wsdl.test"
              encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
        </input>
        <output>
          <soap:body name="echoResponse"
              use="encoded"
              namespace="urn:rpcParams.wsdl.test"
              encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
        </output>
      </operation>
    </binding>
  
    <!-- service decln -->
    <service name="rpcParamsService">
      <port name="RpcParams" binding="tns:rpcParamsBinding">
        <soap:address location="http://localhost:8080/axis/services/RpcParams"/>
      </port>
    </service>
  
  </definitions>