Hi All,

 

I implemented the support for ‘choice’ WSDL construct in Axis C++ . According to our design,  generated stub level classes serialize the choice elements in the following way.

 

int Axis_Serialize_ChoiceComplexType(ChoiceComplexType* param, IWrapperSoapSerializer* pSZ, bool bArray = false)

{

            if ( param == NULL )

            {

             /* TODO : may need to check nillable value - Now done*/

                        pSZ->serializeAsAttribute( "xsi:nil", 0, (void*)&(xsd_boolean_true), XSD_BOOLEAN);

                        pSZ->serialize( ">", NULL);

                        return AXIS_SUCCESS;

            }

 

            /* first serialize attributes if any*/

            pSZ->serialize( ">", 0);

 

            /* then serialize elements if any*/

            pSZ->serializeAsElement("NonChoiceIntValue", Axis_URI_ChoiceComplexType, (void*)&(param->NonChoiceIntValue), XSD_INT);

           

//……………………………………………………………………………………………………………………

//Following two elements are choice elements

// if the element is not NULL it goes to deserializer

 

if(param->IntValue)

            {

                        pSZ->serializeAsElement("IntValue", Axis_URI_ChoiceComplexType, (void*)(param->IntValue), XSD_INT);

            }

            else if(param->StringValue)

            {

                        pSZ->serializeAsElement("StringValue", Axis_URI_ChoiceComplexType, (void*)(param->StringValue), XSD_STRING);

            }

           

//……………………………………………………………………………………………………………………….

pSZ->serializeAsElement("NonChoiceStringValue", Axis_URI_ChoiceComplexType, (void*)(param->NonChoiceStringValue), XSD_STRING);

            return AXIS_SUCCESS;

}

 

 

But if the choice element is a nillable one and its value is set to NULL, then the above logic will fail.

 

Any thoughts on this??

 

Regards,

 

Marcus Dushshantha Chandradasa

Associate  Software Engineer

Virtusa (Pvt) Ltd.

[EMAIL PROTECTED]

Mob:  0714867441

 

 

 

Reply via email to