[
https://issues.apache.org/jira/browse/AXIS2C-557?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Dave Meier updated AXIS2C-557:
------------------------------
Attachment: test2.wsdl
Test WSDL, showing the Note type which has two optional elements, called
"title" and "note".
Here's the scenario that the current code generation does not handle:
A call is made to "SetNote" and in the note element, the "id",
"modificationDateTime" and "accessType" are set, but "title" and "note" are not
provided at all, since they are optional. So the xml coming in would have
something like this:
<note>
<id>1</id>
<modificationDateTime>0001-01-01T00:00:00</modificationDateTime>
<accessType>ATTACHACCESS-DEFAULT</accessType>
</note>
Now, the parsing code will parse "id" correctly, then it will parse "title" as
"0001-01-01T00:00:00" and will parse "note" as "ATTACHACCESS-DEFAULT". After
that there are no nodes left, so an error will occur when it goes to parse
"modificationDateTime".
So, what I'm saying is the absence of optional elements in the XML should be
supported. Since the node name is not checked, this scenario is not handled.
With gSoap, it handles this kind of stuff really well, because I can even add
new required elements and still have a client with an older WSDL call in and
succeed. The gSoap generated code just fills in values based on what's in the
XML and the values that aren't there get set to whatever the default values are.
> WSDL2C: generated adb code does not allow any elements to be omitted - too
> inflexible
> -------------------------------------------------------------------------------------
>
> Key: AXIS2C-557
> URL: https://issues.apache.org/jira/browse/AXIS2C-557
> Project: Axis2-C
> Issue Type: Bug
> Components: code generation
> Affects Versions: Current (Nightly)
> Environment: Windows XP
> Reporter: Dave Meier
> Attachments: test2.wsdl
>
>
> I am using WSDL2C with adb data binding.
> The code that is generated requires all elements specified in the WSDL for a
> given web service call to be present. It should instead check the name of
> each node and allow some data elements to be omitted.
> Instead it generates code like the following, where it assumes the next node
> is the node it expects. It should check the name of the node and skip to the
> next expected node if the name does not match:
>
> /**
> * because elements are ordered this
> works fine
> */
>
> if( current_node != NULL)
> {
> current_node =
> AXIOM_NODE_GET_NEXT_SIBLING( current_node, env);
> }
>
> if ( current_node != NULL)
> {
> current_element = AXIOM_NODE_GET_DATA_ELEMENT(
> current_node, env);
> text_value =
> AXIOM_ELEMENT_GET_TEXT(current_element, env, current_node );
> Here it blindly gets the text_value and sets it into the field that it
> expects the value to be for. This means that all the nodes must be present
> or it will set the wrong values in the fields. So if new arguments are
> added to an object passed in the call, it will no longer be backwards
> compatible with clients that are using the older version of the WSDL.
--
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]