Correction: "RT_AnalogVarListSequence" is a type and there should *not* be
any xml tag in that name.

Dimuthu

On Sat, Jul 25, 2009 at 8:52 PM, Dimuthu Gamage <dimut...@gmail.com> wrote:

>
> 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 <u...@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: u...@unainet.net
>> web: www.unainet.net
>> ****************************************************/
>>
>>
>>
>
>
> --
> Thanks,
> Dimuthu Gamage
>
> http://www.dimuthu.org
> http://www.wso2.org
>



-- 
Thanks,
Dimuthu Gamage

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

Reply via email to