Issue with toEnvelope(..) and toOm(..) in Axis 2 generated code for toOM taking 
in same paramter types
------------------------------------------------------------------------------------------------------

                 Key: AXIS2-4197
                 URL: https://issues.apache.org/jira/browse/AXIS2-4197
             Project: Axis 2.0 (Axis2)
          Issue Type: Bug
          Components: codegen
         Environment: Windows XP. 
            Reporter: Vijeya Aravindan
            Priority: Blocker


Issue with Steps to re-produce:

Say, I have 3 (could be 'n') operations in my wsdl. All 3 take the same param 
type (say CustomParamterType) but internally have different business logic. 

Step1- I take the wsdl and run the Axis 2 code gen as follows:
Step 2- There would be '3' different public accessor methods generated in the 
stub (which is good and expected) take in the same parameter type, then the 
respective toOM() method generated. Say:

public  com.ebay.trinity.identityservice.pres.wsdl.LinkIdentitiesResponseType 
CreateLinkedIdentities(com.ebay.trinity.identityservice.pres.wsdl.LinkIdentitiesType
 linkIdentities150) throws java.rmi.RemoteException

public  com.ebay.trinity.identityservice.pres.wsdl.ModifyLinkResponseType 
ModifyLink
(com.ebay.trinity.identityservice.pres.wsdl.LinkIdentitiesType modifyLink140) 
throws java.rmi.RemoteException

public  com.ebay.trinity.identityservice.pres.wsdl.RemoveLinkResponseType 
RemoveLink
(com.ebay.trinity.identityservice.pres.wsdl.LinkIdentitiesType removeLink132) 
throws java.rmi.RemoteException

All the above take LinkIdentitiesType param.

In side each of the method, an envolope is formed as follows (auto gen code 
further)
env = toEnvelope(getFactory(_operationClient.getOptions().getSoapVersionURI()), 
linkIdentities150,optimizeContent(new 
javax.xml.namespace.QName("http://identity.ebay.com/trinity";, 
"CreateLinkedIdentities")))

private org.apache.axiom.soap.SOAPEnvelope 
toEnvelope(org.apache.axiom.soap.SOAPFactory factory, 
com.ebay.trinity.identityservice.pres.wsdl.LinkIdentitiesType param, boolean 
optimizeContent) throws org.apache.axis2.AxisFault {
 org.apache.axiom.soap.SOAPEnvelope envelope = factory.getDefaultEnvelope();
        envelope.getBody().addChild(toOM(param, optimizeContent));
        return envelope;
} 
 
private org.apache.axiom.om.OMElement 
toOM(com.ebay.trinity.identityservice.pres.wsdl.LinkIdentitiesType param, 
boolean optimizeContent)
throws org.apache.axis2.AxisFault {
    try {
---------some code-------
 JaxbRIDataSource source = new JaxbRIDataSource( 
com.ebay.trinity.identityservice.pres.wsdl.LinkIdentitiesType.class,
       param,
       marshaller,
       "http://identity.ebay.com/trinity";,
       "removeLink"); /////////////////////////////////////////////// CULPRIT 
//////////////////////////////////////////////////
 org.apache.axiom.om.OMNamespace namespace = 
factory.createOMNamespace("http://identity.ebay.com/trinity";,
          null);
 return factory.createOMElement(source, "removeLink", namespace); 
/////////////////////////////////////////////// CULPRIT 
//////////////////////////////////////////////////
    } catch (javax.xml.bind.JAXBException bex){
 throw org.apache.axis2.AxisFault.makeFault(bex);
    }
}
 
The above mehods are called by the following calls:
 
So whenever we make any af the above  *Link call, it used to form the envelope 
as follows:
 
<?xml version='1.0' encoding='UTF-8'?><soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";><soapenv:Header><axis2ns1:version
xmlns:axis2ns1="http://identity.ebay.com/trinity";>1.2</axis2ns1:version></soapenv:Header><soapenv:Body><removeLink
 /////////////////////////////////////////////// CULPRIT 
//////////////////////////////////////////////////

So all calls finally landing to the Server were being processed for removeLink. 
 
For now, I can fix the aut-generated code for the above methods which takes a 
extra parameter called apiName which can be passed around without stuff like 
removeLink  & createIdentity being hardcoded. The DISADVANTGE IS THAT we need 
to have a static stub version which is checked in our code base which can be 
used in our build time. This is AVOID us from integrating codeGen within our 
ANT script.

As a dev persion, the problem seems to be:
 
Lets consider *Link calls..All these above 3 calls take LinkIdentities param. 
So Axis generates common toEnvelope method which takes LinkIdentities param. 
Now it should create 4 different "toOM" methods for the following

CreateLinkedIdentities
ModifyLiink
ModifyLiinkReturnGuid
RemoveLink
 
But some how it creates just one method and inside this, the RemoveLink is 
always hardcoded.


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

Reply via email to