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, >> >> ¤t_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