You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-user@axis.apache.org by Gilles Devaux <gd...@webraska.com> on 2005/03/02 17:03:20 UTC

RE: Problem deserializing arrays of complex types

Hi,

I have found the solution, I mail it to be in the archive.

Apparently AXIS does not like the attributes in the LinkType type. Setting elements instead of attributes fixed the problem.

Thanks for the help.

-----Message d'origine-----
De : Gilles Devaux [mailto:gdevaux@webraska.com] 
Envoyé : lundi 21 février 2005 14:21
À : axis-user@ws.apache.org
Objet : Problem deserializing arrays of complex types

Hi,
 
First of all sorry if this subject has already been treated before but I can't find my answer in the archives.
 
I have a problem while deserializing arrays with AXIS 1.1. The serialized message (SOAP) is correct but the other way gives me the following exception:

Could not convert LinkType to bean field routeManeuvers[1]', type ManeuverType (see WSDL for type definition)

The thing is that I have list of lists with complex types elsewhere in the WSDL but this one is not working, here is the XSD (relevant part) contained in my WSDL file.
 
<xs:complexType name="DetermineRouteResponseType">
  <xs:sequence>
    <xs:element name="RouteManeuvers" type="w:ManeuverType"
minOccurs="0" maxOccurs="unbounded"/>
    <xs:element..../>
  <xs:sequence>
</xs:complexType>

<xs:complexType name="ManeuverType">
  <xs:sequence>
    <xs:element name="Places" type="w:PlaceType" minOccurs="0"
maxOccurs="unbounded"/>
    <xs:element name="Geometry" type="w:ConnectedLinksType"
minOccurs="0"/>
  <xs:sequence>
</xs:complexType>

<xs:complexType name="ConnectedLinksType">
  <xs:sequence>
    <xs:element name="Links" type="w:LinkType" minOccurs="0"
maxOccurs="unbounded"/>
  </xs:sequence>
  <xs:attribute name="type" use="optional">
    <xs:simpleType>
      <xs:restriction base="xs:string">
        <xs:enumeration value="Intersection"/>
        <xs:enumeration value="RoundAbout"/>
        <xs:enumeration value="EnclosedTrafficArea"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:attribute>
</xs:complexType>

<xs:complexType name="LinkType">
  <xs:sequence>
    <xs:element name="InterLinkAngle" type="w:AngleType" minOccurs="0"/>
    <xs:element name="PositionOnRoundabout" type="w:AngleType"
minOccurs="0"/>
    <xs:element name="Length" type="w:DistanceType" minOccurs="0"/>
  </xs:sequence>
  <xs:attribute name="type" type="xs:string" use="optional"/>
  <xs:attribute name="id" type="xs:string" use="optional"/>
  <xs:attribute name="roadClass" type="xs:int" use="optional"/>
  <xs:attribute name="accessible" type="xs:boolean" use="optional"/>
  <xs:attribute name="oneWay" type="xs:boolean" use="optional"/>
  <xs:attribute name="isManeuverEntryLink" type="xs:boolean"
use="optional"/>
  <xs:attribute name="isManeuverExitLink" type="xs:boolean"
use="optional"/>
  <xs:attribute name="isRouteLink" type="xs:boolean" use="optional"/>
  <xs:attribute name="previousLinkId" type="xs:string" use="optional"/> </xs:complexType>

<xs:complexType name="PlaceType">
  <xs:attribute name="type" type="w:PlaceName" use="required"/>
  <xs:attribute name="value" type="xs:string" use="required"/> </xs:complexType>

The thing is that if I remove the ConnectedLinksType definition and reference it works, even with a list of 'PlaceType' inside a list of 'ManeuverType'. If I add the ConnectedLinksType, the serialization is fine but not the deserialization.

I have already tried to create ArrayOfXXX for complex types for all lists without success.

I have also externalized the definition of the string restriction (type attribute in 'ConnectedLinksType') without success.

I have tried to remove the restriction on the 'type' attribute and just keep a simple string without success.

Someone has any idea ?
Thanks a lot

Gilles DEVAUX.