Marshal customized Float object
"Hoang Linh" <[email protected]> Thu, 2 Oct 2003 01:06:07 +0200 (MEST)
| Newsgroups | gmane.comp.java.enhydra.ksoap |
|---|---|
| Message-ID | <[email protected]> |
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>
--
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! +++