Uploaded image for project: 'Axis'
  1. Axis
  2. AXIS-2095

Items in an array seems to have the wrong name compared to what the WSDL says.



    • Bug
    • Status: Open
    • Major
    • Resolution: Unresolved
    • 1.2.1
    • None
    • None


      My WSDL describes an array (this is only a small fragment of the complete WSDL):

      <complexType name="PropertyValueDTO">
      <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"/>

      <complexType name="ArrayOfPropertyValueDTO">
      <element maxOccurs="unbounded" minOccurs="0" name="item" type="impl:PropertyValueDTO"/>

      <complexType abstract="true" name="TraceableDetailsDTO">
      <element name="hasExternalLinks" type="xsd:boolean"/>
      <element name="label" nillable="true" type="xsd:string"/>
      <element name="properties" nillable="true" type="impl:ArrayOfPropertyValueDTO"/>

      When calling the webservice the return looks like this:

      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:

      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?




            Unassigned Unassigned
            tedsanne Ted Sanne
            13 Vote for this issue
            11 Start watching this issue