Re: Marshal customized Float object

"Hoang Linh" <[email protected]> Thu, 2 Oct 2003 03:08:45 +0200 (MEST)
Newsgroups gmane.comp.java.enhydra.ksoap
Message-ID <[email protected]>
Hi Stefan,

Thanks a lot for your answer.

Brgds,
Linh.

> Hi Linh,
> 
> I think if you do not declare the variables "static" in lines 2,3, and 
> 4, the problem will go away....
> 
> HTH,
> Stefan
> 
> Hoang Linh wrote:
> > Hi kSOAP users and developers,
> > 
> > I'd like to have a question about the problem described below.
> > 
> > A Float object was created to be marshalled with the class
> > MarshalFloatDouble below. The readInstance method of the class
> > MarshalFloatDouble uses the
> > method CnFloat.stringToFloat() from the class CnFloat ( line 29 ). 
> > 
> > The main code for parsing received Soap message and extracting  data was
> > also described below ( line 39). The tested Soap messages for Float type
> and
> > Date type are at lines 62 and 70
> > respectively. 
> > 
> > The problem ( from line 52) is that the 2 extracted objects of type
> Float
> > (number1 and number2) are identical to the last object. Similar
> procedures that
> > was done with kSOAP MarshalDate and IsoDate classes  gave a correct
> result (
> > from line 57).
> > 
> > After some debugs, I found that, with the received Float type SOAP
> message,
> > the returned object "result"  at line 20 is correct each time the
> > readInstance method was called. But  the method recvEnvelope.parse (xp) 
> at line 49
> > returns a Soap Envelope object containing a body with 2 identical
> properties.
> > Some problems with ClassMap ?  
> >   
> > Any idea of this problem and how to solve it?
> > 
> > Thank you very much.
> > Brgds/Linh.
> > 
> > 
> > 
> > 1.    public class Float extends Object {
> > 
> > 2.    private static String Value = null;
> > 3.    private static int IntegerPart;
> > 4.    private static int FractionPart;
> > 
> > 5.    public Float (){
> > 6.    }
> > 
> > 7.    public Float (String value){
> > 8.    this.Value=value;
> > 9.    }
> > 
> > 10.    // some methods ...
> > 11.    }
> > 
> > 
> > 12.    public class MarshalFloatDouble implements Marshal {
> > 
> > 13.    public  static Class FLOAT_CLASS = new Float ().getClass ();
> > 
> > 14.    public Object readInstance (SoapParser parser, String namespace,
> > String
> > name,     ElementType expected) throws IOException {
> > 
> > 15.    parser.parser.read (); // start tag
> > 16.    Object result;
> > 17.    if (name.equals ("float"))
> > a.    result = CnFloat.stringToFloat(parser.parser.readText());  
> > 18.    else
> > a.    throw new RuntimeException ("float  expected");
> > 19.    parser.parser.read (); // end tag
> > 
> > 20.    return result;
> > 21.    }
> > 
> > 
> > 22.    public void writeInstance (SoapWriter writer,
> > 1.    Object instance) throws IOException {
> > 
> > 23.    writer.writer.write(CnFloat.floatToString((Float)instance));   
> > 24.    }
> > 
> > 
> > 25.    public void register (ClassMap cm) {
> > 26.    cm.addMapping (cm.xsd, "float", MarshalFloatDouble.FLOAT_CLASS,
> > this);
> > 27.    } 
> > 
> > 28.    }
> > 
> > 29.    public class CnFloat {
> > 
> > 30.    public static String floatToString(Float number) {
> > 31.    return number.getValue();
> > 32.    }
> > 
> > 33.    public static Float stringToFloat(String value) {
> > 
> > 34.    Float floatNum= new Float(value);
> > 
> > 35.    //  method for parsing a string and map it to a Float object.
> > 
> > 36.    return floatNum;
> > 37.    }
> > 38.    }
> > 
> > 
> > 39.    /* The main code for parsing soap message */
> > 
> > 40.    ByteArrayInputStream bis = new ByteArrayInputStream
> > (SoapMesg.getBytes());
> > 41.    InputStreamReader reader = new InputStreamReader (bis);
> > 42.    XmlParser xp = new XmlParser(reader);
> > 43.    ClassMap cm =new ClassMap();
> > 
> > 44.    Marshal md= new MarshalDate();  // register for Date Type
> > 45.    md.register(cm);
> > 
> > 46.    Marshal mf= new MarshalFloatDouble(); // register for Float type
> > 47.    mf.register(cm);    
> > 
> > 48.    SoapEnvelope recvEnvelope = new SoapEnvelope (cm);
> > 49.    recvEnvelope.parse (xp);  
> > 50.    SoapObject BodyElement = (SoapObject) recvEnvelope.getBody();
> > 
> > 51.    // 2 objects : number1 and number2 are identical to number2
> ???????
> > 52.    Float number1=(Float)BodyElement.getProperty(0);
> > 53.    System.out.println("FloatNumber1=" +number1.getValue());
> > 54.    Float number2=(Float)BodyElement.getProperty(1);
> > 55.    System.out.println("FloatNumber2=" + number2.getValue());
> > 
> > 56.    // Simimlar procedure :  MarshalDate downloaded from kSoap gives
> 2
> > correct objects  date1, date2.
> > 57.    Date date1= (Date)BodyElement.getProperty(0);
> > 58.    System.out.println("date1=" +date1.toString());
> > 59.    Date date2= (Date)BodyElement.getProperty(1);
> > 60.    System.out.println("date2=" +date2.toString());
> > 
> > 
> > 61.    /*  Here are the received Soap messages for Date type and Float
> > type*/
> > 
> > 62.    <SOAP-ENV:Envelope
> > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> > xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
> > SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
> > xmlns:xsd="http://www.w3.org/2001/XMLSchema">
> > 63.    <SOAP-ENV:Body>
> > 64.    <echoFloat>
> > 65.    <Num1 xsi:type="xsd:float">54.45</Num1>
> > 66.    <Num2 xsi:type="xsd:float">65.56</Num2>
> > 67.    </echoFloat>
> > 68.    </SOAP-ENV:Body>
> > 69.    </SOAP-ENV:Envelope>
> > 
> > 
> > 70.    <SOAP-ENV:Envelope
> > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> > xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
> > SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
> > xmlns:xsd="http://www.w3.org/2001/XMLSchema">
> > 71.    <SOAP-ENV:Body>
> > 72.    <echoDate>
> > 73.    <ExecTime1
> > xsi:type="xsd:dateTime">2003-08-27T20:14:54.45Z</ExecTime1>
> > 74.    <ExecTime2
> > xsi:type="xsd:dateTime">2003-09-28T21:15:55.46Z</ExecTime2>
> > 75.    </echoDate>
> > 76.    </SOAP-ENV:Body>
> > 77.    </SOAP-ENV:Envelope>
> > 
> 
> 
> _______________________________________________
> Ksoap mailing list
> [email protected]
> http://www.enhydra.org/mailman/listinfo.cgi/ksoap
> 

-- 
NEU FÜR ALLE - GMX MediaCenter - für Fotos, Musik, Dateien...
Fotoalbum, File Sharing, MMS, Multimedia-Gruß, GMX FotoService

Jetzt kostenlos anmelden unter http://www.gmx.net

+++ GMX - die erste Adresse für Mail, Message, More! +++