Hello,

I work currently in the realm of deserializing xsd:extension based data types. After noticing, that getChardataAs does not work as expected, i had a closer look at it.
It is defined (in SoapDeserializer.cpp) as
void
SoapDeSerializer::getChardataAs(void* pValue,
                                XSDTYPE type)
and contains
pValue = pSimpleType->getValue();
Since call by value is done here, this has no effect on the caller side (it is a local copy which is assigned to).
Furthermore in the generated sources, calls like
pIWSDZ->getChardataAs((void*)&(param->t_SellRate_value), XSD_DECIMAL);
show up.
Taking the address with an ampersand does not lead to a modifyable lvalue, so some repair has to be done here too.
With string (char*) datatypes there is an additional problem:
pIWSDZ->getChardataAs((void*)&(param->t_RequiredRoom2_value), XSD_STRING);
This is pointer to pointer, where only pointer was intended (no ampersand should be applied for xsd__string and xsd__nmtoken; i made a (resolved already) JIRA entry for a similar problem in the serializing code).

I resolved these problems temporarily in the following way

Pass the void* as a reference
void
SoapDeSerializer::getChardataAs(void*& pValue,
                                XSDTYPE type)
This means changes in SoapDeSerializer.cpp, SoapDeSerializer.h and IWrapperSoapDeSerializer.hpp.

Replace

pIWSDZ->getChardataAs((void*)&(param->t_SellRate_value), XSD_DECIMAL);
with
void* pValue3;
pIWSDZ->getChardataAs(pValue3, XSD_DECIMAL);
param->t_SellRate_value = *((xsd__decimal*) pValue3);
and
pIWSDZ->getChardataAs((void*)&(param->t_RequiredRoom2_value), XSD_STRING);
with
void* pValue6;
pIWSDZ->getChardataAs(pValue6, XSD_STRING);
param->t_RequiredRoom2_value = (xsd__string) pValue6;

Any ideas, how to make this better?
Any kind soul (Adrian, John, ...) to integrate this (or an alternative approach) into stub generation?

Greetings

Franz


begin:vcard
fn:Dr. Franz Fehringer
n:Fehringer;Franz
org:ISO Software Systeme
adr;quoted-printable:;;Eichendorffstrasse 29;N=C3=BCrnberg;;90491;Deutschland
email;internet:mailto:[EMAIL PROTECTED]
tel;work:+49/(911) - 99594-0 
tel;fax:+49/(911) - 99594-580
x-mozilla-html:TRUE
url:http://www.isogmbh.de/
version:2.1
end:vcard


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to