axis-c-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Dimuthu Gamage <dimut...@gmail.com>
Subject Re: Problem in deserialization with WSDL2C generated code
Date Sat, 25 Jul 2009 15:22:58 GMT
Hi Unai,

This is a bug in fact in the deserializaton code. "RT_AnalogVarListSequence"
is a type and there should be any xml tag in that name.
Look at the pattern on the non-array case (this bug is there with the array
scenario), the code inside


>
>     if (axutil_qname_equals(element_qname, env, qname))
>     {
>
>                is_early_node_valid = AXIS2_TRUE;

                  ..

should be changed to



>
>     if (adb_RT_AnalogVarListSequence_is_particle() ||
> axutil_qname_equals(element_qname, env, qname))
>     {
>            if (axutil_qname_equals(element_qname, env, qname))
>            {
>                 is_early_node_valid = AXIS2_TRUE;
>
               }
               ..

Please raise a jira to report this problem.

Thanks
Dimuthu


2009/7/24 Unai Est├ębanez <unai@unainet.net>

> Hi,
> I have a problem with my client while I try to deserialize my server
> response. Please, could anybody help me?
>
> I generate the server and client code with WSDL2C
> client: /usr/local/axis2c/bin/tools/wsdl2c/WSDL2C.sh -uri ./rsu_vars.wsdl
> -sp -d adb -uw --noBuildXML
> server: /usr/local/axis2c/bin/tools/wsdl2c/WSDL2C.sh -uri ./rsu_vars.wsdl
> -ss -sd -sp -d adb -uw --noBuildXML
>
> At the bottom of this message I will include the wsdl I use.
>
> The problem I have is that when I serialize, the automatic generated code,
> perform this check: ( I have hand written remarks inside the code )
> --- SEVER SERIALIZATION CODE BEGIN ---
> .... more code here
>                     /*
>                      * parsing RT_AnalogVarListSequence element
>                      */
>                            if(!adb_RT_AnalogVarListSequence_is_particle())
> <----- THIS FUNCTIONS ALWAYS DO: "return AXIS2_TRUE;"
>                            {
>                                axutil_stream_write(stream, env,
> start_input_str, start_input_str_len); <-- NEVER INSERTS THE TAG
> "<RT_AnalogVarListSequence>"
>                            }
>
>  adb_RT_AnalogVarListSequence_serialize((adb_RT_AnalogVarListSequence_t*)element,
>
>
>     env, current_node, parent_element,
>
>     adb_RT_AnalogVarListSequence_is_particle() || AXIS2_FALSE, namespaces,
> next_ns_index);
>                            if(!adb_RT_AnalogVarListSequence_is_particle())
>                            {
>                                axutil_stream_write(stream, env,
> end_input_str, end_input_str_len);
>                            }
>                         }
> .... more code here
> --- SEVER SERIALIZATION CODE END ---
>
> On the other hand the deserialization code fails because it needs the
> <RT_AnalogVarListSequence> tag:
> --- CLIENT DESERIALIZATION CODE BEGIN ---
> /*
>  * building RT_AnalogVarListSequence element
> */
> element_qname = axutil_qname_create(env, "RT_AnalogVarListSequence", "
> http://www.example.org/rsu_vars/", NULL); <-- CLient expects the
> "<RT_AnalogVarListSequence>" tag
> for (i = 0, sequence_broken = 0, current_node = first_node;
> !sequence_broken && current_node != NULL;)
> {
>                                  if(axiom_node_get_node_type(current_node,
> env) != AXIOM_ELEMENT)
>                                   {
>                                      current_node
> =axiom_node_get_next_sibling(current_node, env);
>                                      is_early_node_valid = AXIS2_FALSE;
>                                      continue;
>                                   }
>
>                                   current_element = (axiom_element_t
> *)axiom_node_get_data_element(current_node, env);
>                                   qname =
> axiom_element_get_qname(current_element, env, current_node);
>
>                                   if (axutil_qname_equals(element_qname,
> env, qname))
>                                   {
>
>                                       is_early_node_valid = AXIS2_TRUE;
>
>
>                                           element =
> (void*)adb_RT_AnalogVarListSequence_create(env);
>
>                                           status =
> adb_RT_AnalogVarListSequence_deserialize((adb_RT_AnalogVarListSequence_t*)element,
> env,
>
> &current_node, &is_early_node_valid, AXIS2_FALSE);
>
>                                           if(AXIS2_FAILURE ==  status)
>                                           {
>                                               AXIS2_LOG_ERROR(env->log,
> AXIS2_LOG_SI, "failed in building element RT_AnalogVarListSequence ");
>                                           }
>                                           else
>                                           {
>
> axutil_array_list_add_at(arr_list, env, i, element);
>                                           }
>
>                                      if(AXIS2_FAILURE ==  status)
>                                      {
>                                          AXIS2_LOG_ERROR(env->log,
> AXIS2_LOG_SI, "failed in setting the value for RT_AnalogVarListSequence ");
>                                          if(element_qname)
>                                          {
>
> axutil_qname_free(element_qname, env);
>                                          }
>                                          if(arr_list)
>                                          {
>
> axutil_array_list_free(arr_list, env);
>                                          }
>                                          return AXIS2_FAILURE;
>                                      }
>
>                                      i ++;
>                                     current_node =
> axiom_node_get_next_sibling(current_node, env);
>                                   }
>                                   else
>                                   {
>                                      ALWAYS ENTER HERE!!!!
>                                       is_early_node_valid = AXIS2_FALSE;
>                                       sequence_broken = 1;
>                                   }
>
> }
> --- CLIENT DESERIALIZATION CODE END ---
>
> --- WSDL BEGIN ---
> <?xml version="1.0" encoding="UTF-8"?>
> <wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
> xmlns:tns="http://www.example.org/rsu_vars/" xmlns:wsdl="
> http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="
> http://www.w3.org/2001/XMLSchema" name="rsu_vars" targetNamespace="
> http://www.example.org/rsu_vars/">
>  <wsdl:types>
>    <xsd:schema targetNamespace="http://www.example.org/rsu_vars/">
>
>        <xsd:complexType name="RT_DigitalVar">
>                <xsd:sequence>
>                        <xsd:element name="ID_DigitalVar"
> type="xsd:string"></xsd:element>
>                        <xsd:element name="OwnerType"
> type="xsd:string"></xsd:element>
>                        <xsd:element name="OwnerCode"
> type="xsd:int"></xsd:element>
>                        <xsd:element name="RT_TimeStamp"
> type="xsd:dateTime"></xsd:element>
>                        <xsd:element name="RT_Value"
> type="xsd:int"></xsd:element>
>                        <xsd:element name="RT_Alm"
> type="xsd:int"></xsd:element>
>                </xsd:sequence>
>        </xsd:complexType>
>
>        <xsd:complexType name="RT_AnalogVar">
>                <xsd:sequence>
>                        <xsd:element name="ID_AnalogVar"
> type="xsd:string"></xsd:element>
>                        <xsd:element name="OwnerType"
> type="xsd:string"></xsd:element>
>                        <xsd:element name="OwnerCode"
> type="xsd:int"></xsd:element>
>                        <xsd:element name="RT_TimeStamp"
> type="xsd:dateTime"></xsd:element>
>                        <xsd:element name="RT_Value"
> type="xsd:double"></xsd:element>
>                        <xsd:element name="RT_Alm"
> type="xsd:int"></xsd:element>
>                </xsd:sequence>
>        </xsd:complexType>
>
>        <xsd:complexType name="ID_Variable">
>                <xsd:sequence>
>                        <xsd:element name="ID_Var"
> type="xsd:string"></xsd:element>
>                        <xsd:element name="OwnerType"
> type="xsd:string"></xsd:element>
>                        <xsd:element name="OwnerCode"
> type="xsd:int"></xsd:element>
>                </xsd:sequence>
>        </xsd:complexType>
>
>        <xsd:element name="IDVariable" type="tns:ID_Variable"></xsd:element>
>
>        <xsd:element name="AnalogicVariable"
> type="tns:RT_AnalogVar"></xsd:element>
>
>        <xsd:element name="DigitalVariable"
> type="tns:RT_DigitalVar"></xsd:element>
>
>        <xsd:complexType name="RT_AnalogVarList">
>                <xsd:sequence minOccurs="1" maxOccurs="255">
>                        <xsd:element name="NewElement"
>                                type="tns:RT_AnalogVar">
>                        </xsd:element>
>                </xsd:sequence>
>        </xsd:complexType>
>
>        <xsd:complexType name="RT_DigitalVarList">
>                <xsd:sequence minOccurs="1" maxOccurs="255">
>                        <xsd:element name="NewElement"
>                                type="tns:RT_DigitalVar">
>                        </xsd:element>
>                </xsd:sequence>
>        </xsd:complexType>
>
>        <xsd:element name="AnalogicVariableList"
>                type="tns:RT_AnalogVarList">
>        </xsd:element>
>
>        <xsd:element name="DigitalVariableList"
>                type="tns:RT_DigitalVarList">
>        </xsd:element>
>        <xsd:element name="get_all_digital_variables">
>                <xsd:complexType>
>                        <xsd:sequence>
>                                <xsd:element name="in"
> type="xsd:string"></xsd:element>
>                        </xsd:sequence>
>                </xsd:complexType>
>        </xsd:element>
>        <xsd:element name="get_all_digital_variablesResponse">
>                <xsd:complexType>
>                        <xsd:sequence>
>                                <xsd:element name="out"
> type="xsd:string"></xsd:element>
>                        </xsd:sequence>
>                </xsd:complexType>
>        </xsd:element>
>        <xsd:element name="get_all_analogic_variables">
>                <xsd:complexType>
>                        <xsd:sequence>
>                                <xsd:element name="in"
> type="xsd:string"></xsd:element>
>                        </xsd:sequence>
>                </xsd:complexType>
>        </xsd:element>
>        <xsd:element name="get_all_analogic_variablesResponse">
>                <xsd:complexType>
>                        <xsd:sequence>
>                                <xsd:element name="out"
> type="xsd:string"></xsd:element>
>                        </xsd:sequence>
>                </xsd:complexType>
>        </xsd:element>
>    </xsd:schema>
>  </wsdl:types>
>    <wsdl:message name="GetDigitalVariableMsg">
>        <wsdl:part name="Parameter"
> element="tns:IDVariable"></wsdl:part></wsdl:message>
>    <wsdl:message name="DigitalVariableResponseMsg">
>        <wsdl:part name="Parameter"
> element="tns:DigitalVariable"></wsdl:part></wsdl:message>
>    <wsdl:message name="GetAnalogVariableMsg">
>        <wsdl:part name="Parameter"
> element="tns:IDVariable"></wsdl:part></wsdl:message>
>    <wsdl:message name="AnalogVariableResponseMsg">
>        <wsdl:part name="Parameter"
> element="tns:AnalogicVariable"></wsdl:part></wsdl:message>
>    <wsdl:message name="GetAllDigitalVariablesMsg">
>    </wsdl:message>
>    <wsdl:message name="AllDigitalVariablesResponseMsg">
>        <wsdl:part name="parameters"
> element="tns:DigitalVariableList"></wsdl:part>
>    </wsdl:message>
>    <wsdl:message name="GetAllAnalogicVariablesMsg">
>    </wsdl:message>
>    <wsdl:message name="AllAnalogicVariablesResponseMsg">
>        <wsdl:part name="parameters"
> element="tns:AnalogicVariableList"></wsdl:part>
>    </wsdl:message>
>    <wsdl:portType name="vars">
>        <wsdl:operation name="get_digital_variables">
>                <wsdl:input
> message="tns:GetDigitalVariableMsg"></wsdl:input>
>                <wsdl:output message="tns:DigitalVariableResponseMsg"
> name="get_digital_variables_response"></wsdl:output>
>        </wsdl:operation>
>        <wsdl:operation name="get_analogic_variables">
>                <wsdl:input message="tns:GetAnalogVariableMsg"></wsdl:input>
>                <wsdl:output message="tns:AnalogVariableResponseMsg"
> name="get_analogic_variables_response"></wsdl:output>
>        </wsdl:operation>
>        <wsdl:operation name="get_all_digital_variables">
>            <wsdl:input
>                message="tns:GetAllDigitalVariablesMsg">
>            </wsdl:input>
>            <wsdl:output
>                message="tns:AllDigitalVariablesResponseMsg"
> name="get_all_digital_variables_response">
>            </wsdl:output>
>        </wsdl:operation>
>        <wsdl:operation name="get_all_analogic_variables">
>            <wsdl:input
>                message="tns:GetAllAnalogicVariablesMsg">
>            </wsdl:input>
>            <wsdl:output
>                message="tns:AllAnalogicVariablesResponseMsg"
> name="get_all_analogic_variables_response">
>            </wsdl:output>
>        </wsdl:operation>
>    </wsdl:portType>
>    <wsdl:binding name="VarsBinding" type="tns:vars">
>        <soap:binding style="document"
>                transport="http://schemas.xmlsoap.org/soap/http" />
>        <wsdl:operation name="get_digital_variables">
>                <soap:operation
>                        soapAction="
> http://www.example.org/rsu_vars/get_digital_variables" />
>                <wsdl:input>
>                        <soap:body use="literal" />
>                </wsdl:input>
>                <wsdl:output name="get_digital_variables_response">
>                        <soap:body use="literal" />
>                </wsdl:output>
>        </wsdl:operation>
>        <wsdl:operation name="get_analogic_variables">
>                <soap:operation
>                        soapAction="
> http://www.example.org/rsu_vars/get_analogic_variables" />
>                <wsdl:input>
>                        <soap:body use="literal" />
>                </wsdl:input>
>                <wsdl:output name="get_analogic_variables_response">
>                        <soap:body use="literal" />
>                </wsdl:output>
>        </wsdl:operation>
>        <wsdl:operation name="get_all_digital_variables">
>                <soap:operation
>                        soapAction="
> http://www.example.org/rsu_vars/get_all_digital_variables" />
>                <wsdl:input>
>                        <soap:body use="literal" />
>                </wsdl:input>
>                <wsdl:output name="get_all_digital_variables_response">
>                        <soap:body use="literal" />
>                </wsdl:output>
>        </wsdl:operation>
>        <wsdl:operation name="get_all_analogic_variables">
>                <soap:operation
>                        soapAction="
> http://www.example.org/rsu_vars/get_all_analogic_variables" />
>                <wsdl:input>
>                        <soap:body use="literal" />
>                </wsdl:input>
>                <wsdl:output name="get_all_analogic_variables_response">
>                        <soap:body use="literal" />
>                </wsdl:output>
>        </wsdl:operation>
>    </wsdl:binding>
>    <wsdl:service name="rsu_vars">
>    <wsdl:port binding="tns:VarsBinding" name="vars_port">
>      <soap:address location="http://www.example.org/rsu_vars/"/>
>    </wsdl:port>
>  </wsdl:service>
> </wsdl:definitions>
> --- WSDL END ---
>
> Thanks
> --
> /****************************************************
> Unai Est├ębanez Sevilla
> mail: unai@unainet.net
> web: www.unainet.net
> ****************************************************/
>
>
>


-- 
Thanks,
Dimuthu Gamage

http://www.dimuthu.org
http://www.wso2.org

Mime
View raw message