Hi, We are using the Android client library (OpenCMIS version 0.10.0) to develop a CMIS Consumer App. If a user uses the App to upload a document and, while the upload is progressing, views another object's properties, the App sometimes crashes with a java.util.ConcurrentModificationException. We believe it is caused by multiple threads accessing org.apache.chemistry.opencmis.client.api.ObjectType. Is this because the class is not thread-safe? Is there anything we can do to protect our App from this exception while being able to access the library from multiple threads? Would upgrading to version 0.11 or 0.12 help?
10-01 22:44:45.981: E/AndroidRuntime(27060): FATAL EXCEPTION: main 10-01 22:44:45.981: E/AndroidRuntime(27060): java.util.ConcurrentModificationException 10-01 22:44:45.981: E/AndroidRuntime(27060): at java.util.LinkedHashMap$LinkedHashIterator.nextEntry(LinkedHashMap.java:347) 10-01 22:44:45.981: E/AndroidRuntime(27060): at java.util.LinkedHashMap$EntryIterator.next(LinkedHashMap.java:376) 10-01 22:44:45.981: E/AndroidRuntime(27060): at java.util.LinkedHashMap$EntryIterator.next(LinkedHashMap.java:374) 10-01 22:44:45.981: E/AndroidRuntime(27060): at java.util.HashMap.writeObject(HashMap.java:993) 10-01 22:44:45.981: E/AndroidRuntime(27060): at java.lang.reflect.Method.invokeNative(Native Method) 10-01 22:44:45.981: E/AndroidRuntime(27060): at java.lang.reflect.Method.invoke(Method.java:525) 10-01 22:44:45.981: E/AndroidRuntime(27060): at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1053) 10-01 22:44:45.981: E/AndroidRuntime(27060): at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1404) 10-01 22:44:45.981: E/AndroidRuntime(27060): at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1671) 10-01 22:44:45.981: E/AndroidRuntime(27060): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1517) 10-01 22:44:45.981: E/AndroidRuntime(27060): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1481) 10-01 22:44:45.981: E/AndroidRuntime(27060): at java.io.ObjectOutputStream.writeFieldValues(ObjectOutputStream.java:979) 10-01 22:44:45.981: E/AndroidRuntime(27060): at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:368) 10-01 22:44:45.981: E/AndroidRuntime(27060): at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1074) 10-01 22:44:45.981: E/AndroidRuntime(27060): at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1404) 10-01 22:44:45.981: E/AndroidRuntime(27060): at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1671) 10-01 22:44:45.981: E/AndroidRuntime(27060): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1517) 10-01 22:44:45.981: E/AndroidRuntime(27060): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1481) 10-01 22:44:45.981: E/AndroidRuntime(27060): at java.util.HashMap.writeObject(HashMap.java:995) 10-01 22:44:45.981: E/AndroidRuntime(27060): at java.lang.reflect.Method.invokeNative(Native Method) 10-01 22:44:45.981: E/AndroidRuntime(27060): at java.lang.reflect.Method.invoke(Method.java:525) 10-01 22:44:45.981: E/AndroidRuntime(27060): at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1053) 10-01 22:44:45.981: E/AndroidRuntime(27060): at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1404) 10-01 22:44:45.981: E/AndroidRuntime(27060): at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1671) 10-01 22:44:45.981: E/AndroidRuntime(27060): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1517) 10-01 22:44:45.981: E/AndroidRuntime(27060): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1481) 10-01 22:44:45.981: E/AndroidRuntime(27060): at java.io.ObjectOutputStream.writeFieldValues(ObjectOutputStream.java:979) 10-01 22:44:45.981: E/AndroidRuntime(27060): at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:368) 10-01 22:44:45.981: E/AndroidRuntime(27060): at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1074) 10-01 22:44:45.981: E/AndroidRuntime(27060): at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1404) 10-01 22:44:45.981: E/AndroidRuntime(27060): at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1671) 10-01 22:44:45.981: E/AndroidRuntime(27060): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1517) 10-01 22:44:45.981: E/AndroidRuntime(27060): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1481) 10-01 22:44:45.981: E/AndroidRuntime(27060): at java.io.ObjectOutputStream.writeFieldValues(ObjectOutputStream.java:979) 10-01 22:44:45.981: E/AndroidRuntime(27060): at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:368) 10-01 22:44:45.981: E/AndroidRuntime(27060): at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1074) 10-01 22:44:45.981: E/AndroidRuntime(27060): at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1404) 10-01 22:44:45.981: E/AndroidRuntime(27060): at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1671) 10-01 22:44:45.981: E/AndroidRuntime(27060): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1517) 10-01 22:44:45.981: E/AndroidRuntime(27060): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1481) 10-01 22:44:45.981: E/AndroidRuntime(27060): at java.io.ObjectOutputStream.writeFieldValues(ObjectOutputStream.java:979) 10-01 22:44:45.981: E/AndroidRuntime(27060): at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:368) 10-01 22:44:45.981: E/AndroidRuntime(27060): at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1074) 10-01 22:44:45.981: E/AndroidRuntime(27060): at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1404) 10-01 22:44:45.981: E/AndroidRuntime(27060): at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1671) 10-01 22:44:45.981: E/AndroidRuntime(27060): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1517) 10-01 22:44:45.981: E/AndroidRuntime(27060): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1481) 10-01 22:44:45.981: E/AndroidRuntime(27060): at java.util.HashMap.writeObject(HashMap.java:995) 10-01 22:44:45.981: E/AndroidRuntime(27060): at java.lang.reflect.Method.invokeNative(Native Method) 10-01 22:44:45.981: E/AndroidRuntime(27060): at java.lang.reflect.Method.invoke(Method.java:525) 10-01 22:44:45.981: E/AndroidRuntime(27060): at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1053) 10-01 22:44:45.981: E/AndroidRuntime(27060): at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1404) 10-01 22:44:45.981: E/AndroidRuntime(27060): at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1671) 10-01 22:44:45.981: E/AndroidRuntime(27060): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1517) 10-01 22:44:45.981: E/AndroidRuntime(27060): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1481) ... ... Brian ...