Uploaded image for project: 'Axis2'
  1. Axis2
  2. AXIS2-2957

ADB. Time of addition of elements into array proportionally to a Sum!

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Critical
    • Resolution: Won't Fix
    • 1.2
    • None
    • adb, codegen
    • None
    • Win XP Pro, Tomcat 5.5.20, Eclipse 3.2, Sun JDK 1.5

    Description

      The code, generated by ADB for addition of an element to an array, is carried out in time proportional to a sum from number of added elements.
      Also the ADB generates a dirty (bad formatted and without using import statements) code.
      The code was generated from Eclipse by wizard "Axis2 code generator".

      Small part of WSDL:

      <xs:complexType name="Advertisement">
      <xs:sequence>
      <xs:element name="id" type="xs:long"/>
      <xs:element name="placeId" type="xs:int"/>
      <xs:element name="header" type="xs:string"/>
      <xs:element name="file" type="xs:string"/>
      <xs:element minOccurs="0" name="url" type="xs:string"/>
      </xs:sequence>
      </xs:complexType>
      <xs:complexType name="AdvertisementArray">
      <xs:sequence>
      <xs:element maxOccurs="unbounded" minOccurs="0" name="advertisement"
      type="data:Advertisement"/>
      </xs:sequence>
      </xs:complexType>
      <xs:complexType name="Packet">
      <xs:sequence>
      <xs:element name="id" type="xs:string"/>
      <xs:element minOccurs="0" name="sessionId" type="xs:string"/>
      <xs:element minOccurs="0" name="advertisements" type="data:AdvertisementArray"/>
      <xs:element minOccurs="0" name="info" type="xs:string"/>
      </xs:sequence>
      </xs:complexType>
      <xs:element name="packet" type="data:Packet"/>

      See an example of a code:

      The auto generated by ADB AdvertisementArray.java contains following code:

      public void addAdvertisement (
      ru.scanrealty.supplier.deo. SRDAdvertisement param) {
      if (localAdvertisement == null) {
      localAdvertisement = new ru.scanrealty.supplier.deo. SRDAdvertisement [] {};
      }

      // update the setting tracker
      localAdvertisementTracker = true;

      java.util. List list = org.apache.axis2.databinding.utils.ConverterUtil
      .toList (localAdvertisement);
      list.add (param);
      this.localAdvertisement = (ru.scanrealty.supplier.deo. SRDAdvertisement []) list
      .toArray (new ru.scanrealty.supplier.deo. SRDAdvertisement [list
      .size ()]);

      }

      Also org.apache.axis2.databinding.utils.ConverterUtil.java contains following code:

      public static List toList (Object [] array) {
      if (array == null)

      { return new ArrayList (); }

      else {
      ArrayList list = new ArrayList ();
      for (int i = 0; i < array.length; i ++)

      { list.add (array [i]); }

      return list;
      }
      }

      It's very bad code!

      The following code will be carried out in time proportional to a sum from amount of added elements:

      ResultSet rs = < gets result set from DB >
      AdvertisementArray advertisements = new AdvertisementArray ();
      while (rs.next ()) {
      advertisements.addAdvertisement (createAdvertisement (rs));
      }

      It occurs because of transformation of an array to the list and copying of elements of an array in a loop in a code ConverterUtil.toList().

      In Java the given code should be as:

      public class AdvertisementArray
      implements org.apache.axis2.databinding. ADBBean {

      ......
      protected ArrayList <Advertisement> localAdvertisement; // Sequence and repeated elements.

      public Advertisement [] getAdvertisement ()

      { ... some checks (also up on null) ... return (Advertisement []) localAdvertisement.toArray (new Advertisement [0]); }

      public void addAdvertisement (Advertisement el)

      { ... some checks ... localAdvertisement.add (el); }

      ......
      }

      Attachments

        Activity

          People

            amilachinthaka Amila Chinthaka Suriarachchi
            masterden Maslakov Denis
            Votes:
            1 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: