Return-Path: Delivered-To: apmail-ws-axis-dev-archive@www.apache.org Received: (qmail 61511 invoked from network); 10 Mar 2008 19:44:28 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 10 Mar 2008 19:44:28 -0000 Received: (qmail 53271 invoked by uid 500); 10 Mar 2008 19:44:24 -0000 Delivered-To: apmail-ws-axis-dev-archive@ws.apache.org Received: (qmail 53208 invoked by uid 500); 10 Mar 2008 19:44:23 -0000 Mailing-List: contact axis-dev-help@ws.apache.org; run by ezmlm Precedence: bulk Reply-To: axis-dev@ws.apache.org list-help: list-unsubscribe: List-Post: List-Id: Delivered-To: mailing list axis-dev@ws.apache.org Received: (qmail 53197 invoked by uid 99); 10 Mar 2008 19:44:23 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 10 Mar 2008 12:44:23 -0700 X-ASF-Spam-Status: No, hits=-1998.5 required=10.0 tests=ALL_TRUSTED,WEIRD_PORT X-Spam-Check-By: apache.org Received: from [140.211.11.140] (HELO brutus.apache.org) (140.211.11.140) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 10 Mar 2008 19:43:32 +0000 Received: from brutus (localhost [127.0.0.1]) by brutus.apache.org (Postfix) with ESMTP id 99168234C08A for ; Mon, 10 Mar 2008 12:42:46 -0700 (PDT) Message-ID: <2024063262.1205178166619.JavaMail.jira@brutus> Date: Mon, 10 Mar 2008 12:42:46 -0700 (PDT) From: "Rob Allen (JIRA)" To: axis-dev@ws.apache.org Subject: [jira] Commented: (AXIS-2421) incorrect Bean deserialisation - deserialised object's constructor invoked with incorrect argument values - axis seems to confuse types In-Reply-To: <2091950776.1141288304722.JavaMail.jira@ajax.apache.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Virus-Checked: Checked by ClamAV on apache.org [ https://issues.apache.org/jira/browse/AXIS-2421?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12577140#action_12577140 ] Rob Allen commented on AXIS-2421: --------------------------------- This is how we worked around this issue... // got right class arg if (values.get(i).getClass().getName().toLowerCase().indexOf(classes[c].getName().toLowerCase()) != -1) { found = true; args[c] = values.get(i); values.remove(i); // ADD THIS LINE } I should mention that I don't know whether this is a guaranteed fix as I'm not sure whether the first argument in the "values" list will always map to the first value of the args[] array. The order was correct in each case I saw while running in the debugger. > incorrect Bean deserialisation - deserialised object's constructor invoked with incorrect argument values - axis seems to confuse types > --------------------------------------------------------------------------------------------------------------------------------------- > > Key: AXIS-2421 > URL: https://issues.apache.org/jira/browse/AXIS-2421 > Project: Axis > Issue Type: Bug > Components: Serialization/Deserialization > Affects 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. - You can reply to this email to add a comment to the issue online. --------------------------------------------------------------------- To unsubscribe, e-mail: axis-dev-unsubscribe@ws.apache.org For additional commands, e-mail: axis-dev-help@ws.apache.org