axis-java-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "gareth smith (JIRA)" <axis-...@ws.apache.org>
Subject [jira] Created: (AXIS-2421) incorrect Bean deserialisation - deserialised object's constructor invoked with incorrect argument values - axis seems to confuse types
Date Thu, 02 Mar 2006 08:31:44 GMT
incorrect Bean deserialisation - deserialised object's constructor invoked with incorrect argument
values - axis seems to confuse types
---------------------------------------------------------------------------------------------------------------------------------------

         Key: AXIS-2421
         URL: http://issues.apache.org/jira/browse/AXIS-2421
     Project: Apache Axis
        Type: Bug
  Components: Serialization/Deserialization  
    Versions: 1.3    
 Environment: Client on Windows XP Pro, Server (Tomcat and Axis) on RedHat Linux
    Reporter: gareth smith
    Priority: Minor


Problem:
- transmitting a simple object via SOAP
- object has 4 attributes, two "long" values, one "int" value and one Java String value
- problem is with deserialisation of longs
- object's constructor is invoked with the first long's value for both long parameters
- 2nd long's value is never used

- problem seems to be in org.apache.axis.encoding.ConstructorTarget.java line 88
- args[c] = values.get(i) causes the first value of a type to be returned, regardless of whether
or not ir was returned already

- fix implemented by replacing above line with:
args[c] = values.remove(i);

- not sure of the wider implications of this fix, however.

/*
 * Some client code to test this
 */

package soaptest;

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import javax.xml.namespace.QName;

public class ProfileClient {
    public static void main(String[] args) {
	try {
	    String endpoint = "http://localhost:8087/axis/services/ProfileService";

	    Service service = new Service();
	    Call call = (Call) service.createCall();

	    call.setTargetEndpointAddress(new java.net.URL(endpoint));
	    call.setOperationName(new QName("http://soapinterop.org", "addSubscriber"));

	    call.registerTypeMapping(java.lang.Class.forName("soaptest.Subscriber"), new QName("Subscriber"),
new org.apache.axis.encoding.ser.BeanSerializerFactory(java.lang.Class.forName("soaptest.Subscriber"),
new QName("Subscriber")), new org.apache.axis.encoding.ser.BeanDeserializerFactory(java.lang.Class.forName("soaptest.Subscriber"),
new QName("Subscriber")));

	    Subscriber sub = new Subscriber (555555, 358408, 1, "jussi@sonera.fi");
	    System.out.println("About to invoke..." + sub.toString());
	    call.invoke(new Object[] {sub});
	}
	catch (java.rmi.RemoteException ex) {
	    System.err.println("Problem with remote connection: " + ex.toString());
	}
	catch (Exception ex) {
	    System.err.println("Problem executing client: " + ex.toString());
	}
    }
}




/*
 * This class should be on client and server
 * /

package soaptest;

public class Subscriber implements java.io.Serializable {
    public Subscriber(long imsi, long msisdn, int operator, String URI) {
	myIMSI = imsi;
	myMSISDN = msisdn;
	myOperator = operator;
	myURI = URI;
    }

    public long getIMSI() {
	System.out.println("Subscriber.getIMSI(): returning " + myIMSI);
	return myIMSI;
    }

    public long getMSISDN() {
	System.out.println("Subscriber.getMSISDN(): returning " + myMSISDN);
	return myMSISDN;
    }

    public int getOperator() {
	System.out.println("Subscriber.getOperator(): returning " + myOperator);
	return myOperator;
    }

    public String getURI() {
	System.out.println("Subscriber.getURI(): returning " + myURI);
	return myURI;
    }

    public void setIMSI(long imsi) {
	myIMSI = imsi;
    }

    public void setMSISDN(long msisdn) {
	myMSISDN = msisdn;
    }

    public void setOperator(int operator) {
	myOperator = operator;
    }

    public void setURI(String uri) {
	myURI = uri;
    }

    public String toString() {
	return "IMSI: " + myIMSI + ", MSISDN: " + myMSISDN + ", operator: " + myOperator + ", URI:
" + myURI;
    }

    private long myIMSI;
    private long myMSISDN;
    private int myOperator;
    private String myURI;
}
/*
 * this should be deployed as a web service
 */

package soaptest;

import java.util.*;


public class ProfileAccess {
    public ProfileAccess() {
        System.err.println("Starting");
     }

    public void addSubscriber(Subscriber sub)  {
        System.err.println("The subscriber being added is " + sub.toString());
    }

}

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


Mime
View raw message