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

Dimuthu Gamage resolved AXIS2C-921.
-----------------------------------

    Resolution: Fixed

Please check the comment on 
https://issues.apache.org/jira/browse/AXIS2C-920?focusedCommentId=12560656#action_12560656

I have attached a test case for the fix. 

Thanks

> Parsing of SOAP message with a nillable member array of size 0 causes 
> incorrect parsing
> ---------------------------------------------------------------------------------------
>
>                 Key: AXIS2C-921
>                 URL: https://issues.apache.org/jira/browse/AXIS2C-921
>             Project: Axis2-C
>          Issue Type: Bug
>          Components: wsdl2c tool
>    Affects Versions: Current (Nightly)
>            Reporter: Frank Huebbers
>
> Hi, 
> I have come across a new bug which involves the parsing/deserialization of a 
> SOAP message with nillable array types. The setup is as follows:
> I have a return type with two array elements and with another element which 
> is not nillable followed right after as described in my wsdl file as follows:
>     <element name="boolType0" nillable="false" type="xsd:boolean" />
>     <element name="arrayType1" nillable="true" minOccurs="0" 
> maxOccurs="unbounded" type="xsd:string" />
>     <element name="arrayType2" nillable="true" minOccurs="0" 
> maxOccurs="unbounded" type="xsd:string" />
>     <element name="boolType1" nillable="false" type="xsd:boolean" />
>     <element name="boolType2" nillable="false" type="xsd:boolean" />
>     <element name="boolType3" nillable="false" type="xsd:boolean" />
> In my particular example, the arrayType1 and arrayTyp2 turn out to be null. 
> After trying to deserialize arrayType1 and arrayType2, however, the 
> "current_node" which Axis2/c tries to parse next is set to "boolType2." In 
> other words, the current_node is two "siblings" ahead of what it should be. 
> When examining the generated code, I found out what the cause of the problem 
> is. Specifically, I get the following for loop code snippet:
> for (i = 0, sequence_broken = 0, tmp_node = current_node = 
> axiom_node_get_next_sibling(current_node, env); current_node != NULL; 
> current_node = axiom_node_get_next_sibling(current_node, env))
>                                {
>                                   if(axiom_node_get_node_type(current_node, 
> env) != AXIOM_ELEMENT)
>                                   {
>                                      continue;
>                                   }
> // more code
>                               }
> current_node = tmp_node; 
> When examining the code, we can see that at the beginning of the loop, the 
> next sibling to the current node is retrieved and stored both in tmp_node and 
> currrent_node. If, as is the case in my example, the type is null, this means 
> that the current_node will not be reset to the previous value. The way we can 
> get arround this is by introducing a new variable (tmpArray_node) and doing 
> the following operation before the for loop:
>                                     element_found = AXIS2_FALSE;
>                                     tmpArray_node = current_node;
> then, after the loop we do the following operation:
>                                if (AXIS2_TRUE == element_found)
>                                {
>                                    current_node = tmp_node;                   
>                 
>                                }
>                                else
>                                {
>                                    current_node = tmpArray_node;
>                                }
> Note that this assumes that the "element_found" variable is set when the 
> array type has at least one member. This is already the case in the generated 
> code (not shown in this example). By making the additions above, I was able 
> to get the generated code to parse the SOAP message correctly.
> Frank
>   

-- 
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]

Reply via email to