You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by "Yuval (JIRA)" <ji...@apache.org> on 2007/11/23 13:52:43 UTC
[jira] Reopened: (AXIS2-3331) wrong codegen for anytype
[ https://issues.apache.org/jira/browse/AXIS2-3331?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Yuval reopened AXIS2-3331:
--------------------------
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.
> wrong codegen for anytype
> -------------------------
>
> Key: AXIS2-3331
> URL: https://issues.apache.org/jira/browse/AXIS2-3331
> Project: Axis 2.0 (Axis2)
> Issue Type: Bug
> Components: codegen
> Affects Versions: 1.3, nightly
> Reporter: Yuval
> Assignee: Amila Chinthaka Suriarachchi
>
> 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
--
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: axis-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-dev-help@ws.apache.org