Author: davsclaus Date: Fri Oct 5 07:10:18 2012 New Revision: 1394387 URL: http://svn.apache.org/viewvc?rev=1394387&view=rev Log: CAMEL-5675: Flush java bean introspector cache when stopping Camel. And property editor is not thread safe.
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/util/IntrospectionSupport.java Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/util/IntrospectionSupport.java URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/util/IntrospectionSupport.java?rev=1394387&r1=1394386&r2=1394387&view=diff ============================================================================== --- camel/trunk/camel-core/src/main/java/org/apache/camel/util/IntrospectionSupport.java (original) +++ camel/trunk/camel-core/src/main/java/org/apache/camel/util/IntrospectionSupport.java Fri Oct 5 07:10:18 2012 @@ -103,6 +103,9 @@ public final class IntrospectionSupport LOG.debug("Clearing cache[size={}, hits={}, misses={}]", new Object[]{CACHE.size(), CACHE.getHits(), CACHE.getMisses()}); } CACHE.clear(); + + // flush java beans introspector as it may be in use by the PropertyEditor + java.beans.Introspector.flushCaches(); } public static boolean isGetter(Method method) { @@ -484,14 +487,19 @@ public final class IntrospectionSupport if (typeConverter != null) { return typeConverter.mandatoryConvertTo(type, value); } - PropertyEditor editor = PropertyEditorManager.findEditor(type); - if (editor != null) { - editor.setAsText(value.toString()); - return editor.getValue(); - } if (type == URI.class) { return new URI(value.toString()); } + PropertyEditor editor = PropertyEditorManager.findEditor(type); + if (editor != null) { + // property editor is not thread safe, so we need to lock + Object answer; + synchronized (editor) { + editor.setAsText(value.toString()); + answer = editor.getValue(); + } + return answer; + } return null; }