Incorrect method parameter names in WSDL document if service method signature 
is defined in an interface instead of a class
---------------------------------------------------------------------------------------------------------------------------

                 Key: AXIS2-3977
                 URL: https://issues.apache.org/jira/browse/AXIS2-3977
             Project: Axis 2.0 (Axis2)
          Issue Type: Bug
          Components: kernel
    Affects Versions: 1.4
            Reporter: Norman Kubicek


The signature of the service method is defined in a Java interface instead of a 
class:

  public interface CustomerService
  {
      public Customer getCustomer(String ID);
  }

Web service requests for all methods are processed from a dynamically created 
class (java.lang.reflect.Proxy) that implements the interface defining the 
service method (CustomerService). The intention behind is to obtain a central 
entry point for different Web services requests.

  public class ServiceInvocationHandler implements InvocationHandler
  {
    public Object invoke(Object proxy, Method method, Object[] args)
              throws Throwable 
     {
          ...
          // process Web service requests for all methods
         ...
      }
  }

The proxy is created by a ServiceObjectSupplier instance:

  public class MyServiceObjectSupplier implements ServiceObjectSupplier
  {
      /**
       * The service interface, specified in the service.xml file
       */
      public static final String SERVICE_CLASS = "ServiceClass";

      public Object getServiceObject(AxisService axisService) throws AxisFault 
      {
          // create service invocation handler
          ServiceInvocationHandler handler = null;
          handler = new ServiceInvocationHandler();

          // get the name of the interface from the service.xml file
          Parameter proxyName = axisService.getParameter(SERVICE_CLASS);
        
          // create the dynamic proxy
          try
          {
              Class proxyClass = 
Class.forName(((String)proxyName.getValue()).trim());
              Object proxy = 
Proxy.newProxyInstance(proxyClass.getClassLoader(),  new Class[] { proxyClass 
}, handler);
              return proxy;
          }
          catch (ClassNotFoundException ex)  {
              ex.printStackTrace();
          }
          return null;
      }
  }

The ServiceObjectSupplier and the interface that is implemented by the proxy 
are specified in the service.xml file

<service name="CustomerService">
    <parameter name="ServiceClass" locked="false">CustomerService</parameter>
    <parameter name="ServiceObjectSupplier" 
locked="false">MyServiceObjectSupplier</parameter>
    <operation name="getCustomer">
        <messageReceiver 
class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
    </operation>
</service>

(For reasons of clarity the source code above is simplified.)

The RPCMessageReceiver and the ServiceObjectSupplier mechanism are used to be 
able to generate WSDL automatically. All works fine. The WSDL document is 
generated w/o any errors and service calls finish successfully.
There is only one issue in the WSDL document generated by Axis2. The names of 
the parameters specified in the signature of the service method are ignored and 
replaced by names like "param0", "param1" and so on. So the generated WSDL 
document looks like:

  <xs:element name="getCustomer">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" name="param0" nillable="true" 
type="xs:string"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

instead of:

  <xs:element name="getCustomer">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" name="ID" nillable="true" type="xs:string"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

if the signature of the service method is specified in a class.

I'm not sure if this is really an issue or common behaviour. Is it allowed to 
specify the signature of a service method in a Java interface? During the 
deployment and the WSDL generation there is no warning or error.
Is it correct that this interface is only implemented by a dynamic proxy 
instead of delivering an implementation class?


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to