[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Ksoap: ksoap modifications suggestions / Compatibility with apache / RPCMessagemanager implemented


Renaud,

thanks a lot for your contribution!!! 

Please find my comments inline (some
of the bugs were already fixed in
the version available via CVS):

> public void setClassMap(ClassMap nmap) 
> public void setEncodingStyle(String newEncStyle) 

ok, already fixed in CVS version

> public String getEncodingStyle()  {

I will add that and also support for filling
the property in parseHead.

> - In the writeHead function I replaced the
> 
> writer.startTag (Soap.ENV,"Envelope");
> line by
> writer.startTag (Soap.prefixMap,Soap.ENV,"Envelope");

Something similar is already added, but I
will probably change it to your version.

> this.classMap = classMap; (oups :-))
> by
> this.classMap = namespaceMap;

This was already reported and fixed 
by F.Hunter some time ago. :-) 

> - in the readPrimitive void:
> I added a "or" condition on each "if"
> for example:
> 
> 'if (fallBack == String.class)'
> became 'if (fallBack == String.class || name.equals("string"))'
> I did the same for
> * Integer.class <=> "int"
> * Long.class <=> "long"
> * Float.class <=> "float"...

Ok, thanks, I added this and also support for fixed point numbers.
However, I used "string".equals (name) etc. in order to be
safe from null pointer problems...

> * In KvmSerialisable
> I added the function:
> String getEncodingStyle();
> so that it possible to get the encoding style of the object.

I would prefer to put that into the PropertyInfo?
However, wouldn't support for the kDOM Element type
be sufficient for that purpose? What do the others
think? This is a significant change, and we should
perhaps discuss it in the group...

> * In SoapWriter.java
> - In the write(Object obj) void I added:
> 
>  if (obj instanceof KvmSerializable)  {
>                String encodingS=((KvmSerializable)obj).getEncodingStyle();
>                if (encodingS!=null) writer.attribute("SOAP-ENV"
> +":encodingStyle",encodingS);

see above

> to write the encodingStyle attribute if it is needed.
> - In the "writeProperty(" void:
> I replaced ("type", prefix + ":" + qName [1]); by ("xsi:type", prefix + ":" +
> qName [1]);
> I removed the test "if (obj.getClass () != type.type) {" cause apache need to
> know type of each attribute in a RPCMessage.

This is already fixed. However, instead of removing the test, I
added an implicitTypes flag...

> * In xml package:
> 
> - I changed a little thing in the kxml package (perhaps a bug ?) :
> In org.kxml.parser.StartTag when the method getAttribute(String name) is
> lauched, it calls the methode getAttribute(String namespace, String name) with a
> null namespace. So the function does not return the attribute corresponding to
> the name if they have a non-null namespace. So I propose to replace:
> if (namespace.equals (attr.getNamespace ())  &&
> (name.equals (attr.getName ())
> 
> by
> 
> if (name.equals (attr.getName ())&&
> (namespace.equals (attr.getNamespace ())||(namespace == Xml.NO_NAMESPACE)))
> 
> in the getAttribute(String,String) method.
> (it is also possible to implement the search on the name only in the
> getAttribute(String) method...)

I have added support for null as placeholder for any namespace in
attr.getAttribute (namespace, name), but did not change the
semantics of attr.geyAttribute (name); there may be
more than one attributes having the same name but different
namespaces.

Best regards,
Stefan



-- 
Stefan Haustein             
Univ. Dortmund, FB 4, LS 8   tel: +49 231 755 2499
Baroper Str. 301             fax: +49 231 755 5105
D-44221 Dortmund (Germany)   www-ai.cs.uni-dortmund.de