DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT <http://nagoya.apache.org/bugzilla/show_bug.cgi?id=17588>. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND INSERTED IN THE BUG DATABASE.
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=17588 Bean without own but inherit properties ignors order of elements (includes fix) Summary: Bean without own but inherit properties ignors order of elements (includes fix) Product: Axis Version: 1.1RC1 Platform: All OS/Version: All Status: NEW Severity: Major Priority: Other Component: Serialization/Deserialization AssignedTo: [EMAIL PROTECTED] ReportedBy: [EMAIL PROTECTED] WSDL2Java generates from the following schema definition: <xsd:complexType name="C"> <xsd:complexContent> <xsd:extension base="abc:B"/> </xsd:complexContent> </xsd:complexType> a bean without own properties. All properties are inherit from the base type B. This generates a typeDesc without fields. At the start, axis generates for the TypeDesc the BeanPropertyDescriptor by calling BeanUtils.getPB. Inside this method their is a call processPropertyDescriptors. This method reorders the properties using the typeDesc. If the bean itself has no fields the following code fails (typeDesc.getFields() returns null) org.apache.axis.utils.BeanUtils: ... public static BeanPropertyDescriptor[] processPropertyDescriptors( PropertyDescriptor[] rawPd, Class cls) { ... // If typeDesc meta data exists, re-order according to the fields if (typeDesc != null && typeDesc.getFields() != null) { ArrayList ordered = new ArrayList(); // Add the TypeDesc elements first ... I would recommend the following change to respect superclass fields .. if (typeDesc != null && typeDesc.getFields(true) != null) { ArrayList ordered = new ArrayList(); // Add the TypeDesc elements first ... This leads to another change in org.apache.axis.description.TypeDesc,to enable the method to handle a field variable with a null value. public FieldDesc[] getFields(boolean searchParents) { if (searchParents) { // check superclasses if they exist Class cls = javaClass.getSuperclass(); if (cls != null && !cls.getName().startsWith("java.")) { TypeDesc superDesc = getTypeDescForClass(cls); if (superDesc != null) { FieldDesc [] parentFields = superDesc.getFields(true); /* * Oliver Adler * CHANGE: in order to handle beans without own but inherit fields * where fields is null */ int sizeFields = 0; if(fields != null) { sizeFields = fields.length; } FieldDesc [] ret = new FieldDesc[parentFields.length + sizeFields]; System.arraycopy(parentFields, 0, ret, 0, parentFields.length); if(fields != null) { System.arraycopy(fields, 0, ret, parentFields.length, fields.length); } fields = ret; } } } return fields; }
