axis-java-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From René Zanner (JIRA) <axis-...@ws.apache.org>
Subject [jira] Commented: (AXIS-2095) Items in an array seems to have the wrong name compared to what the WSDL says.
Date Wed, 31 May 2006 17:23:32 GMT
    [ http://issues.apache.org/jira/browse/AXIS-2095?page=comments#action_12414106 ] 

René Zanner commented on AXIS-2095:
-----------------------------------

It seems this bug exists also in version 1.3, so please change the "Affects version" field
to "1.3"!

We use Axis 1.3 with a hand written WSDD as well as a manually modified WSDL. Our Axis client
stubs are generated using this manually modified WSDL file. The stubs expect an "item" element
inside the Array wrapper element but deserialize the wrong response without an error. How
does that work???

So the Axis client stubs (using the ArrayDeserializer) ignore the wrong response from the
server and simply deserialize despite the wrong xml structure. 

Maybe that's the reason why nobody stumbled over it any more? Since we have a .NET client
at the other side, we found this bug very quickly and need a fix as soon as possible!

Thanks a lot!

> Items in an array seems to have the wrong name compared to what the WSDL says.
> ------------------------------------------------------------------------------
>
>          Key: AXIS-2095
>          URL: http://issues.apache.org/jira/browse/AXIS-2095
>      Project: Apache Axis
>         Type: Bug

>     Versions: 1.2.1
>     Reporter: Ted Sanne

>
> My WSDL describes an array (this is only a small fragment of the complete WSDL):
> <complexType name="PropertyValueDTO">
> 	<sequence>
> <element name="URI" type="xsd:boolean"/>
> <element name="dateTime" type="xsd:boolean"/>
> <element name="hasHistory" type="xsd:boolean"/>
> <element name="id" nillable="true" type="xsd:string"/>
> <element name="label" nillable="true" type="xsd:string"/>
> <element name="source" nillable="true" type="xsd:string"/>
> <element name="timestamp" nillable="true" type="xsd:dateTime"/>
> <element name="unit" nillable="true" type="xsd:string"/>
> <element name="updated" nillable="true" type="xsd:dateTime"/>
> <element name="value" nillable="true" type="xsd:string"/>
> </sequence>
> </complexType>
> <complexType name="ArrayOfPropertyValueDTO">
>         <sequence>
>              <element maxOccurs="unbounded" minOccurs="0" name="item" type="impl:PropertyValueDTO"/>
>         </sequence>
> </complexType>
> <complexType abstract="true" name="TraceableDetailsDTO">
>   <sequence>
>    <element name="hasExternalLinks" type="xsd:boolean"/>
>    <element name="label" nillable="true" type="xsd:string"/>
>    <element name="properties" nillable="true" type="impl:ArrayOfPropertyValueDTO"/>
>    </sequence>
> </complexType>
> When calling the webservice the return looks like this:
> <properties>
>    <properties>
>    ...
>    </properties>
> <properties>
> and the client throws the following:
> org.xml.sax.SAXException: Invalid element in com.tracetracker.enterprise.twa.ArrayOfPropertyValueDTO
- properties
> 	at org.apache.axis.encoding.ser.BeanDeserializer.onStartChild(BeanDeserializer.java:258)
> 	at org.apache.axis.encoding.DeserializationContext.startElement(DeserializationContext.java:1035)
> 	at org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:165)
> 	at org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:1141)
>         ...
> It seems the client expects a structure like this:
> <properties>
>    <item>
>    ...
>    </item>
> <properties>
> Having a go at debugging the ArraySerializer I can see in my debugger that both itemQName
and componentQName is null, so elementName is never changed from "properties" to "item":
> // For the maxOccurs case, each item is named with the QName
> // we got in the arguments.  For normal array case, we write an element with
> // that QName, and then serialize each item as <item>
> QName elementName = name;
> Attributes serializeAttr = attributes;
> if (!maxOccursUsage) {
>       serializeAttr = null;  // since we are putting them here
>       context.startElement(name, attributes);
>       if (itemQName != null)
>              elementName = itemQName;
>       else if(componentQName != null)
>               elementName = componentQName;
> } 
> Can anyone tell me what has gone wrong here?

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


---------------------------------------------------------------------
To unsubscribe, e-mail: axis-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-dev-help@ws.apache.org


Mime
View raw message