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 ****************************************************/