Index: src/test/com/thoughtworks/xstream/converters/reflection/ReflectionConverterTest.java =================================================================== --- src/test/com/thoughtworks/xstream/converters/reflection/ReflectionConverterTest.java (revision 8387) +++ src/test/com/thoughtworks/xstream/converters/reflection/ReflectionConverterTest.java (working copy) @@ -121,7 +121,7 @@ // using default mapper instead of XStream#buildMapper() Mapper mapper = new DefaultMapper(new CompositeClassLoader()); // AttributeMapper required by ReflectionConverter - mapper = new AttributeMapper(mapper, xstream.getConverterLookup()); + mapper = new AttributeMapper(mapper, xstream.getConverterLookup(), xstream.getReflectionProvider()); Converter converter = new CustomReflectionConverter(mapper, new PureJavaReflectionProvider()); xstream.registerConverter(converter, -20); xstream.alias("world", World.class); Index: src/java/com/thoughtworks/xstream/XStream.java =================================================================== --- src/java/com/thoughtworks/xstream/XStream.java (revision 8387) +++ src/java/com/thoughtworks/xstream/XStream.java (working copy) @@ -462,7 +462,7 @@ mapper = new OuterClassMapper(mapper); mapper = new ArrayMapper(mapper); mapper = new DefaultImplementationsMapper(mapper); - mapper = new AttributeMapper(mapper, converterLookup); + mapper = new AttributeMapper(mapper, converterLookup, reflectionProvider); if (JVM.is15()) { mapper = buildMapperDynamically( "com.thoughtworks.xstream.mapper.EnumMapper", new Class[]{Mapper.class}, Index: src/java/com/thoughtworks/xstream/mapper/AttributeMapper.java =================================================================== --- src/java/com/thoughtworks/xstream/mapper/AttributeMapper.java (revision 8387) +++ src/java/com/thoughtworks/xstream/mapper/AttributeMapper.java (working copy) @@ -20,7 +20,7 @@ import com.thoughtworks.xstream.converters.Converter; import com.thoughtworks.xstream.converters.ConverterLookup; import com.thoughtworks.xstream.converters.SingleValueConverter; -import com.thoughtworks.xstream.core.util.Fields; +import com.thoughtworks.xstream.converters.reflection.ReflectionProvider; /** * Mapper that allows the usage of attributes for fields and corresponding @@ -39,18 +39,20 @@ private final Map fieldNameToTypeMap = new HashMap(); private final Set typeSet = new HashSet(); private ConverterLookup converterLookup; + private ReflectionProvider reflectionProvider; private final Set fieldToUseAsAttribute = new HashSet(); /** * @deprecated since 1.3 */ public AttributeMapper(Mapper wrapped) { - this(wrapped, null); + this(wrapped, null, null); } - public AttributeMapper(Mapper wrapped, ConverterLookup converterLookup) { + public AttributeMapper(Mapper wrapped, ConverterLookup converterLookup, ReflectionProvider refProvider) { super(wrapped); this.converterLookup = converterLookup; + this.reflectionProvider = refProvider; } /** @@ -100,7 +102,7 @@ } public boolean shouldLookForSingleValueConverter(String fieldName, Class type, Class definedIn) { - Field field = getField(definedIn, fieldName); + Field field = reflectionProvider.getField(definedIn, fieldName); return fieldToUseAsAttribute.contains(field) || fieldNameToTypeMap.get(fieldName) == type || typeSet.contains(type); } @@ -131,7 +133,7 @@ * @deprecated since 1.3.1, use {@link #getConverterFromAttribute(Class, String, Class)} */ public SingleValueConverter getConverterFromAttribute(Class definedIn, String attribute) { - Field field = getField(definedIn, attribute); + Field field = reflectionProvider.getField(definedIn, attribute); return getConverterFromAttribute(definedIn, attribute, field.getType()); } @@ -164,11 +166,7 @@ * @since 1.3 */ public void addAttributeFor(Class definedIn, String fieldName) { - fieldToUseAsAttribute.add(getField(definedIn, fieldName)); + fieldToUseAsAttribute.add(reflectionProvider.getField(definedIn, fieldName)); } - private Field getField(Class definedIn, String fieldName) { - return Fields.find(definedIn, fieldName); - } - }