Index: /apps/workspaces/main/xstream/src/java/com/thoughtworks/xstream/core/DefaultConverterLookup.java =================================================================== --- /apps/workspaces/main/xstream/src/java/com/thoughtworks/xstream/core/DefaultConverterLookup.java (revision 712) +++ /apps/workspaces/main/xstream/src/java/com/thoughtworks/xstream/core/DefaultConverterLookup.java (working copy) @@ -12,6 +12,11 @@ import java.util.Iterator; import java.util.Map; +/** + * The default implementation of converters lookup. + * + * @author Guilherme Silveira + */ public class DefaultConverterLookup implements ConverterLookup { private final PrioritizedList converters = new PrioritizedList(); @@ -46,6 +51,12 @@ public void registerConverter(Converter converter, int priority) { converters.add(converter, priority); + for (Iterator iter = this.typeToConverterMap.keySet().iterator(); iter.hasNext();) { + Class type = (Class) iter.next(); + if(converter.canConvert(type)) { + this.typeToConverterMap.remove(type); + } + } } } Index: /apps/workspaces/main/xstream/src/test/com/thoughtworks/xstream/core/DefaultConverterLookupTest.java =================================================================== --- /apps/workspaces/main/xstream/src/test/com/thoughtworks/xstream/core/DefaultConverterLookupTest.java (revision 0) +++ /apps/workspaces/main/xstream/src/test/com/thoughtworks/xstream/core/DefaultConverterLookupTest.java (revision 0) @@ -0,0 +1,27 @@ +package com.thoughtworks.xstream.core; + +import junit.framework.TestCase; + +import com.thoughtworks.xstream.converters.Converter; +import com.thoughtworks.xstream.converters.SingleValueConverterWrapper; +import com.thoughtworks.xstream.converters.basic.StringConverter; +import com.thoughtworks.xstream.mapper.DefaultMapper; + +/** + * @author Guilherme Silveira + */ +public class DefaultConverterLookupTest extends TestCase { + + public void testConverterChange() { + final DefaultConverterLookup lookup = new DefaultConverterLookup( + new DefaultMapper(Thread.currentThread() + .getContextClassLoader())); + Converter currentConverter = new SingleValueConverterWrapper(new StringConverter()); + lookup.registerConverter(currentConverter, -100); + assertEquals(lookup.lookupConverterForType(String.class), currentConverter); + Converter newConverter = new SingleValueConverterWrapper(new StringConverter()); + lookup.registerConverter(newConverter, 100); + assertEquals(lookup.lookupConverterForType(String.class), newConverter); + } + +}