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

Frank Kuepper updated AXIS2-4285:
---------------------------------

          Description: 
I'm referring to issue AXIS-3331.  The original opener, Yuval, noticed:

=========================================================================================
The joy was premature.

On the following return:

<RetrievePropertiesResponse xmlns="urn:vim2">
  <returnval>
    <obj type="Task">task-173</obj>
    <propSet>
      <name>info.progress</name>
      <val xsi:type="xsd:int">20</val>
    </propSet>
    <propSet>
      <name>info.state</name>
      <val xsi:type="TaskInfoState">running</val>
    </propSet>
  </returnval>
</RetrievePropertiesResponse>

propSet is an array of type DynamicProperty, which is defined as:
         <complexType name="DynamicProperty">
            <sequence>
               <element name="name" type="xsd:string" />
               <element name="val" type="xsd:anyType" />
            </sequence>
         </complexType>

The generated code for reading "val" in DynamicProperty contains:
                    
object.setVal(org.apache.axis2.databinding.utils.ConverterUtil.getAnyTypeObject(reader,
    com.vmware.vim2.ExtensionMapper.class));
reader.next();

The problem is caused by the convention that parsing an object leaves the 
XmlStreamReader iterator on the closing tag. getAnyTypeObject when "val" is 
"xsd:int" leaves the reader on CHARACTERS and not on the "</val>" closing tag. 
This is in conflict with what would happen for a complex type.

The next code that is executed is:
   while (!reader.isStartElement() && !reader.isEndElement())
      reader.next();
Which excpects to reach the closing tag "</propSet>", but it actually arrives 
"</val>". It would return from parsing "propSet" while on "</val>" and next 
code will fail.

I have fixed it on my code by adding:
                    while (!xmlStreamReader.isStartElement() && 
!xmlStreamReader.isEndElement())
                        xmlStreamReader.next();
In ConverterUtils.getAnyTypeObject() the end of the true block of the 
(attributeNameSpace.equals(Constants.XSD_NAMESPACE)) check. I don't know if it 
is correct.

=========================================================================================

After that, Amila noticed, it had been fixed and the issue was resolved.

But I can reproduce the issue in Axis2 1.4.1. Inspecting the sources showed me, 
that neither the fix proposed by Yuval nor any other
fix addressing the problem has been included.




  was:
I'm trying to use Axis2 to access vmware webservices.

Several problems arised with "anyType" code generation. Axis2 1.3 generated it 
as OMElement, while the nightly snapshot of Nov 06, 2007 generated it as 
java.lang.Object.

Object is wrong because the code will not even compile (it has no .serialize() 
method).
OMElement is wrong because it ignores text nodes (string type), thus the 
"builder2.getOMElement().getFirstElement()" generated call returns null.

IMHO it should be generated as OMNode.

xmlns:xsd="http://www.w3.org/2001/XMLSchema";

 <complexType name="DynamicProperty">
    <sequence>
       <element name="name" type="xsd:string" />
       <element name="val" type="xsd:anyType" />
    </sequence>
 </complexType>

For reference, the full wsdl can be downloaded after free registration from 
http://www.vmware.com/download/sdk/index.html (VMware Infrastructure SDK 
Packages version 2.0.1). I'm using ant, but it should be identical to the 
following call:
java org.apache.axis2.wsdl.WSDL2Java -g -ss -ns2p 
urn:vim2=com.vmware.vim2,urn:vim2Service=com.vmware.vim2service -u -uri 
vimService.wsdl


    Affects Version/s:     (was: 1.3)
                           (was: nightly)
                       1.4.1

> CLONE -wrong codegen for anytype
> --------------------------------
>
>                 Key: AXIS2-4285
>                 URL: https://issues.apache.org/jira/browse/AXIS2-4285
>             Project: Axis 2.0 (Axis2)
>          Issue Type: Bug
>          Components: codegen
>    Affects Versions: 1.4.1
>            Reporter: Frank Kuepper
>            Assignee: Amila Chinthaka Suriarachchi
>
> I'm referring to issue AXIS-3331.  The original opener, Yuval, noticed:
> =========================================================================================
> The joy was premature.
> On the following return:
> <RetrievePropertiesResponse xmlns="urn:vim2">
>   <returnval>
>     <obj type="Task">task-173</obj>
>     <propSet>
>       <name>info.progress</name>
>       <val xsi:type="xsd:int">20</val>
>     </propSet>
>     <propSet>
>       <name>info.state</name>
>       <val xsi:type="TaskInfoState">running</val>
>     </propSet>
>   </returnval>
> </RetrievePropertiesResponse>
> propSet is an array of type DynamicProperty, which is defined as:
>          <complexType name="DynamicProperty">
>             <sequence>
>                <element name="name" type="xsd:string" />
>                <element name="val" type="xsd:anyType" />
>             </sequence>
>          </complexType>
> The generated code for reading "val" in DynamicProperty contains:
>                     
> object.setVal(org.apache.axis2.databinding.utils.ConverterUtil.getAnyTypeObject(reader,
>     com.vmware.vim2.ExtensionMapper.class));
> reader.next();
> The problem is caused by the convention that parsing an object leaves the 
> XmlStreamReader iterator on the closing tag. getAnyTypeObject when "val" is 
> "xsd:int" leaves the reader on CHARACTERS and not on the "</val>" closing 
> tag. This is in conflict with what would happen for a complex type.
> The next code that is executed is:
>    while (!reader.isStartElement() && !reader.isEndElement())
>       reader.next();
> Which excpects to reach the closing tag "</propSet>", but it actually arrives 
> "</val>". It would return from parsing "propSet" while on "</val>" and next 
> code will fail.
> I have fixed it on my code by adding:
>                     while (!xmlStreamReader.isStartElement() && 
> !xmlStreamReader.isEndElement())
>                         xmlStreamReader.next();
> In ConverterUtils.getAnyTypeObject() the end of the true block of the 
> (attributeNameSpace.equals(Constants.XSD_NAMESPACE)) check. I don't know if 
> it is correct.
> =========================================================================================
> After that, Amila noticed, it had been fixed and the issue was resolved.
> But I can reproduce the issue in Axis2 1.4.1. Inspecting the sources showed 
> me, that neither the fix proposed by Yuval nor any other
> fix addressing the problem has been included.

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

Reply via email to