Hello,

When will this defect be fixed?  It makes it difficult to test as
parsing fails whenever an optional
String value in left empty.

Thanks,

-Dave. 

-----Original Message-----
From: Dave Meier (JIRA) [mailto:[EMAIL PROTECTED] 
Sent: Wednesday, March 14, 2007 12:17 PM
To: [email protected]
Subject: [jira] Updated: (AXIS2C-551) WSDL2C: generated code does not
handle optional elements


     [
https://issues.apache.org/jira/browse/AXIS2C-551?page=com.atlassian.jira
.plugin.system.issuetabpanels:all-tabpanel ]

Dave Meier updated AXIS2C-551:
------------------------------

    Description: 
With an optional element specified in the WSDL, the generated code
returns an error if the element is not provided.  In the following WSDL
I have an optional element called "name".

----------
WSDL:
----------
<?xml version="1.0" encoding="UTF-8"?>
<definitions name="test"
 targetNamespace="http://localhost:80/gsoap/test.wsdl";
 xmlns:tns="http://localhost:80/gsoap/test.wsdl";
 xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/";
 xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/";
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
 xmlns:xsd="http://www.w3.org/2001/XMLSchema";
 xmlns:c14n="http://www.w3.org/2001/10/xml-exc-c14n#";
 
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssec
urity-utility-1.0.xsd"
 xmlns:ds="http://www.w3.org/2000/09/xmldsig#";
 
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wsse
curity-secext-1.0.xsd"
 xmlns:tt="urn:test"
 xmlns:SOAP="http://schemas.xmlsoap.org/wsdl/soap/";
 xmlns:MIME="http://schemas.xmlsoap.org/wsdl/mime/";
 xmlns:DIME="http://schemas.xmlsoap.org/ws/2002/04/dime/wsdl/";
 xmlns:WSDL="http://schemas.xmlsoap.org/wsdl/";
 xmlns="http://schemas.xmlsoap.org/wsdl/";>

<types>

 <schema targetNamespace="urn:test"
  xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/";
  xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/";
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
  xmlns:xsd="http://www.w3.org/2001/XMLSchema";
  xmlns:c14n="http://www.w3.org/2001/10/xml-exc-c14n#";
 
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssec
urity-utility-1.0.xsd"
  xmlns:ds="http://www.w3.org/2000/09/xmldsig#";
 
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wsse
curity-secext-1.0.xsd"
  xmlns:tt="urn:test"
  xmlns="http://www.w3.org/2001/XMLSchema";
  elementFormDefault="qualified"
  attributeFormDefault="qualified">
  <import namespace="http://www.w3.org/2001/10/xml-exc-c14n#"/>
  <import
namespace="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssec
urity-utility-1.0.xsd"/>
  <import namespace="http://www.w3.org/2000/09/xmldsig#"/>
  <import
namespace="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssec
urity-secext-1.0.xsd"/>
  <import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
  <simpleType name="Attachment-Access-Type">
   <restriction base="xsd:string">
    <enumeration value="ATTACHACCESS-DEFAULT"/>
    <enumeration value="ATTACHACCESS-RESTRICTED"/>
    <enumeration value="ATTACHACCESS-UNRESTRICTED"/>
   </restriction>
  </simpleType>
  <!-- operation request element -->
  <element name="SetAccess">
   <complexType>
    <sequence>
     <element name="name" type="xsd:string" minOccurs="0" maxOccurs="1"
nillable="true"/>
     <element name="activeInactive" type="xsd:boolean" minOccurs="1"
maxOccurs="1"/>
    </sequence>
   </complexType>
  </element>
  <!-- operation response element -->
  <element name="SetAccessResponse">
   <complexType>
    <sequence>
    </sequence>
   </complexType>
  </element>
 </schema>

</types>

<message name="SetAccess">
 <part name="parameters" element="tt:SetAccess"/> </message>

<message name="SetAccessResponse">
 <part name="parameters" element="tt:SetAccessResponse"/> </message>

<portType name="testPortType">
 <operation name="SetAccess">
  <documentation>SetAccess</documentation>
  <input message="tns:SetAccess"/>
  <output message="tns:SetAccessResponse"/>  </operation> </portType>

<binding name="test" type="tns:testPortType">  <SOAP:binding
style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
 <operation name="SetAccess">
  <SOAP:operation soapAction=""/>
  <input>
     <SOAP:body parts="parameters" use="literal"/>
  </input>
  <output>
     <SOAP:body parts="parameters" use="literal"/>
  </output>
 </operation>
</binding>

<service name="test">
 <documentation>gSOAP 2.7.6e generated service
definition</documentation>  <port name="test" binding="tns:test">
  <SOAP:address
location="http://localhost:80/gsoap/gsoap_ssl.dll?test"/>
 </port>
</service>

</definitions>

------------------------
Generated Code:
------------------------
current_element = AXIOM_NODE_GET_DATA_ELEMENT( current_node, env);
text_value = AXIOM_ELEMENT_GET_TEXT(current_element, env, current_node
); if ( NULL == text_value ) {
  status = AXIS2_FAILURE;
}
else
{
  status = AXIS2_SETACCESS_SET_NAME( SetAccess, env,
 
text_value); }

--------------------------
Recommendation:
--------------------------
Do not check if the value is NULL.  Instead, just set it.  It's okay to
set the value to NULL in the structure.  Right now, the data is not
filled in because of the error being returned, so everything fails.
Should generated this code instead:

current_element = AXIOM_NODE_GET_DATA_ELEMENT( current_node, env);
text_value = AXIOM_ELEMENT_GET_TEXT(current_element, env, current_node
); status = AXIS2_SETACCESS_SET_NAME( SetAccess, env,
 
text_value);





  was:
With an optional element specified in the WSDL, the generated code
returns an error if the element is not provided.

----------
WSDL:
----------
<?xml version="1.0" encoding="UTF-8"?>
<definitions name="test"
 targetNamespace="http://localhost:80/gsoap/test.wsdl";
 xmlns:tns="http://localhost:80/gsoap/test.wsdl";
 xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/";
 xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/";
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
 xmlns:xsd="http://www.w3.org/2001/XMLSchema";
 xmlns:c14n="http://www.w3.org/2001/10/xml-exc-c14n#";
 
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssec
urity-utility-1.0.xsd"
 xmlns:ds="http://www.w3.org/2000/09/xmldsig#";
 
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wsse
curity-secext-1.0.xsd"
 xmlns:tt="urn:test"
 xmlns:SOAP="http://schemas.xmlsoap.org/wsdl/soap/";
 xmlns:MIME="http://schemas.xmlsoap.org/wsdl/mime/";
 xmlns:DIME="http://schemas.xmlsoap.org/ws/2002/04/dime/wsdl/";
 xmlns:WSDL="http://schemas.xmlsoap.org/wsdl/";
 xmlns="http://schemas.xmlsoap.org/wsdl/";>

<types>

 <schema targetNamespace="urn:test"
  xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/";
  xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/";
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
  xmlns:xsd="http://www.w3.org/2001/XMLSchema";
  xmlns:c14n="http://www.w3.org/2001/10/xml-exc-c14n#";
 
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssec
urity-utility-1.0.xsd"
  xmlns:ds="http://www.w3.org/2000/09/xmldsig#";
 
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wsse
curity-secext-1.0.xsd"
  xmlns:tt="urn:test"
  xmlns="http://www.w3.org/2001/XMLSchema";
  elementFormDefault="qualified"
  attributeFormDefault="qualified">
  <import namespace="http://www.w3.org/2001/10/xml-exc-c14n#"/>
  <import
namespace="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssec
urity-utility-1.0.xsd"/>
  <import namespace="http://www.w3.org/2000/09/xmldsig#"/>
  <import
namespace="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssec
urity-secext-1.0.xsd"/>
  <import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
  <simpleType name="Attachment-Access-Type">
   <restriction base="xsd:string">
    <enumeration value="ATTACHACCESS-DEFAULT"/>
    <enumeration value="ATTACHACCESS-RESTRICTED"/>
    <enumeration value="ATTACHACCESS-UNRESTRICTED"/>
   </restriction>
  </simpleType>
  <!-- operation request element -->
  <element name="SetAccess">
   <complexType>
    <sequence>
     <element name="name" type="xsd:string" minOccurs="0" maxOccurs="1"
nillable="true"/>
     <element name="activeInactive" type="xsd:boolean" minOccurs="1"
maxOccurs="1"/>
    </sequence>
   </complexType>
  </element>
  <!-- operation response element -->
  <element name="SetAccessResponse">
   <complexType>
    <sequence>
    </sequence>
   </complexType>
  </element>
 </schema>

</types>

<message name="SetAccess">
 <part name="parameters" element="tt:SetAccess"/> </message>

<message name="SetAccessResponse">
 <part name="parameters" element="tt:SetAccessResponse"/> </message>

<portType name="testPortType">
 <operation name="SetAccess">
  <documentation>SetAccess</documentation>
  <input message="tns:SetAccess"/>
  <output message="tns:SetAccessResponse"/>  </operation> </portType>

<binding name="test" type="tns:testPortType">  <SOAP:binding
style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
 <operation name="SetAccess">
  <SOAP:operation soapAction=""/>
  <input>
     <SOAP:body parts="parameters" use="literal"/>
  </input>
  <output>
     <SOAP:body parts="parameters" use="literal"/>
  </output>
 </operation>
</binding>

<service name="test">
 <documentation>gSOAP 2.7.6e generated service
definition</documentation>  <port name="test" binding="tns:test">
  <SOAP:address
location="http://localhost:80/gsoap/gsoap_ssl.dll?test"/>
 </port>
</service>

</definitions>

------------------------
Generated Code:
------------------------
current_element = AXIOM_NODE_GET_DATA_ELEMENT( current_node, env);
text_value = AXIOM_ELEMENT_GET_TEXT(current_element, env, current_node
); if ( NULL == text_value ) {
  status = AXIS2_FAILURE;
}
else
{
  status = AXIS2_SETACCESS_SET_NAME( SetAccess, env,
 
text_value); }

--------------------------
Recommendation:
--------------------------
Do not check if the value is NULL.  Instead, just set it.  It's okay to
set the value to NULL in the structure.  Right now, the data is not
filled in because of the error being returned, so everything fails.
Should generated this code instead:

current_element = AXIOM_NODE_GET_DATA_ELEMENT( current_node, env);
text_value = AXIOM_ELEMENT_GET_TEXT(current_element, env, current_node
); status = AXIS2_SETACCESS_SET_NAME( SetAccess, env,
 
text_value);






> WSDL2C: generated code does not handle optional elements
> --------------------------------------------------------
>
>                 Key: AXIS2C-551
>                 URL: https://issues.apache.org/jira/browse/AXIS2C-551
>             Project: Axis2-C
>          Issue Type: Bug
>          Components: code generation
>    Affects Versions: Current (Nightly)
>         Environment: Windows XP
>            Reporter: Dave Meier
>            Priority: Blocker
>             Fix For: Current (Nightly)
>
>
> With an optional element specified in the WSDL, the generated code
returns an error if the element is not provided.  In the following WSDL
I have an optional element called "name".
> ----------
> WSDL:
> ----------
> <?xml version="1.0" encoding="UTF-8"?> <definitions name="test"
>  targetNamespace="http://localhost:80/gsoap/test.wsdl";
>  xmlns:tns="http://localhost:80/gsoap/test.wsdl";
>  xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/";
>  xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/";
>  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
>  xmlns:xsd="http://www.w3.org/2001/XMLSchema";
>  xmlns:c14n="http://www.w3.org/2001/10/xml-exc-c14n#";
>
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssec
urity-utility-1.0.xsd"
>  xmlns:ds="http://www.w3.org/2000/09/xmldsig#";
>
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wsse
curity-secext-1.0.xsd"
>  xmlns:tt="urn:test"
>  xmlns:SOAP="http://schemas.xmlsoap.org/wsdl/soap/";
>  xmlns:MIME="http://schemas.xmlsoap.org/wsdl/mime/";
>  xmlns:DIME="http://schemas.xmlsoap.org/ws/2002/04/dime/wsdl/";
>  xmlns:WSDL="http://schemas.xmlsoap.org/wsdl/";
>  xmlns="http://schemas.xmlsoap.org/wsdl/";>
> <types>
>  <schema targetNamespace="urn:test"
>   xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/";
>   xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/";
>   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
>   xmlns:xsd="http://www.w3.org/2001/XMLSchema";
>   xmlns:c14n="http://www.w3.org/2001/10/xml-exc-c14n#";
>
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssec
urity-utility-1.0.xsd"
>   xmlns:ds="http://www.w3.org/2000/09/xmldsig#";
>
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wsse
curity-secext-1.0.xsd"
>   xmlns:tt="urn:test"
>   xmlns="http://www.w3.org/2001/XMLSchema";
>   elementFormDefault="qualified"
>   attributeFormDefault="qualified">
>   <import namespace="http://www.w3.org/2001/10/xml-exc-c14n#"/>
>   <import
namespace="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssec
urity-utility-1.0.xsd"/>
>   <import namespace="http://www.w3.org/2000/09/xmldsig#"/>
>   <import
namespace="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssec
urity-secext-1.0.xsd"/>
>   <import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
>   <simpleType name="Attachment-Access-Type">
>    <restriction base="xsd:string">
>     <enumeration value="ATTACHACCESS-DEFAULT"/>
>     <enumeration value="ATTACHACCESS-RESTRICTED"/>
>     <enumeration value="ATTACHACCESS-UNRESTRICTED"/>
>    </restriction>
>   </simpleType>
>   <!-- operation request element -->
>   <element name="SetAccess">
>    <complexType>
>     <sequence>
>      <element name="name" type="xsd:string" minOccurs="0"
maxOccurs="1" nillable="true"/>
>      <element name="activeInactive" type="xsd:boolean" minOccurs="1"
maxOccurs="1"/>
>     </sequence>
>    </complexType>
>   </element>
>   <!-- operation response element -->
>   <element name="SetAccessResponse">
>    <complexType>
>     <sequence>
>     </sequence>
>    </complexType>
>   </element>
>  </schema>
> </types>
> <message name="SetAccess">
>  <part name="parameters" element="tt:SetAccess"/> </message> <message > 
> name="SetAccessResponse">  <part name="parameters" 
> element="tt:SetAccessResponse"/> </message> <portType 
> name="testPortType">  <operation name="SetAccess">
>   <documentation>SetAccess</documentation>
>   <input message="tns:SetAccess"/>
>   <output message="tns:SetAccessResponse"/>  </operation> </portType> > 
> <binding name="test" type="tns:testPortType">  <SOAP:binding 
> style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
>  <operation name="SetAccess">
>   <SOAP:operation soapAction=""/>
>   <input>
>      <SOAP:body parts="parameters" use="literal"/>
>   </input>
>   <output>
>      <SOAP:body parts="parameters" use="literal"/>
>   </output>
>  </operation>
> </binding>
> <service name="test">
>  <documentation>gSOAP 2.7.6e generated service 
> definition</documentation>  <port name="test" binding="tns:test">
>   <SOAP:address 
> location="http://localhost:80/gsoap/gsoap_ssl.dll?test"/>
>  </port>
> </service>
> </definitions>
> ------------------------
> Generated Code:
> ------------------------
> current_element = AXIOM_NODE_GET_DATA_ELEMENT( current_node, env); 
> text_value = AXIOM_ELEMENT_GET_TEXT(current_element, env, current_node

> ); if ( NULL == text_value ) {
>   status = AXIS2_FAILURE;
> }
> else
> {
>   status = AXIS2_SETACCESS_SET_NAME( SetAccess, env,
>                                                                    
> text_value); }
> --------------------------
> Recommendation:
> --------------------------
> Do not check if the value is NULL.  Instead, just set it.  It's okay
to set the value to NULL in the structure.  Right now, the data is not
filled in because of the error being returned, so everything fails.
Should generated this code instead:
> current_element = AXIOM_NODE_GET_DATA_ELEMENT( current_node, env); 
> text_value = AXIOM_ELEMENT_GET_TEXT(current_element, env, current_node

> ); status = AXIS2_SETACCESS_SET_NAME( SetAccess, env,
>                                                                    
> text_value);

--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



**********************************************************************
This email and any files transmitted with it are confidential and
intended solely for the use of the individual or entity to whom they
are addressed. Any unauthorized review, use, disclosure or distribution is 
prohibited. If you are not the intended recipient, please contact the sender by 
reply e-mail and destroy all copies of the original message.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to