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=22819>. 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=22819 TypeDesc problems Summary: TypeDesc problems Product: Axis Version: current (nightly) Platform: Other OS/Version: Other Status: NEW Severity: Normal Priority: Other Component: Basic Architecture AssignedTo: [EMAIL PROTECTED] ReportedBy: [EMAIL PROTECTED] Problem 1: When registering a type mapping for a bean using call.registerTypeMapping (Class, QName, Class, Class, boolean) method from multiple threads at the same time three things might happen: A) The type mapping is registered successfully (*) B) The type mapping is registered successfully but the number of fields in the TypeDesc of the bean (TypeDesc.getTypeDescForClass(<bean>).getFields().length) is incorrect. C) The type mapping registration fails (internal error): java.lang.ArrayIndexOutOfBoundsException at java.lang.System.arraycopy(Native Method) at org.apache.axis.description.TypeDesc.getFields(TypeDesc.java:212) at org.apache.axis.utils.BeanUtils.processPropertyDescriptors (BeanUtils.java:259) at org.apache.axis.utils.BeanUtils.getPd(BeanUtils.java:103) at org.apache.axis.description.TypeDesc.getPropertyDescriptors (TypeDesc.java:470) at org.apache.axis.encoding.ser.BeanSerializerFactory.<init> (BeanSerializerFactory.java:88) at java.lang.reflect.Constructor.newInstance(Native Method) at org.apache.axis.encoding.ser.BaseSerializerFactory.createFactory (BaseSerializerFactory.java:256) at org.apache.axis.client.Call.registerTypeMapping(Call.java:2069) Solution: TypeDesc.getPropertyDescriptors() should be synchronized (same should be probably done for getPropertyDescriptorMap() and getAnyContentDescriptor()) Problem 2: TypeDesc.getFields(boolean) if called multiple times on the same instance (canSearchParents, searchParents are true and the javaClass extends some other bean) it will always increment the fields array by the number of fields found in the parent class (because the function updates the its own fields array each time called) So even if type mapping is registered successfully without any error (as in 1- A) the TypeDesc.getFields() array might contain invalid number of operations. That's because BeanUtil.processPropertyDescriptors() calls TypeDesc.getFields (true) twice. Solution: The getFields(true) either shouldn't update its own fields array each time or update it once and then just return the updated array on subsequent calls.
