[ 
https://issues.apache.org/jira/browse/AXIS2-3977?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Keith Godwin Chapman reassigned AXIS2-3977:
-------------------------------------------

    Assignee: Keith Godwin Chapman

> 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
>            Assignee: Keith Godwin Chapman
>            Priority: Minor
>
> 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