axis-c-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Unai Est├ębanez <u...@unainet.net>
Subject Problem in deserialization with WSDL2C generated code
Date Fri, 24 Jul 2009 10:02:27 GMT
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
****************************************************/

Mime
View raw message