Rob Walker created CONFIGURATION-837:
----------------------------------------

             Summary: MapConfiguration$1 does not implement Cloneable exception
                 Key: CONFIGURATION-837
                 URL: https://issues.apache.org/jira/browse/CONFIGURATION-837
             Project: Commons Configuration
          Issue Type: Bug
    Affects Versions: 1.10
            Reporter: Rob Walker


Note sure if 1.10 is actively maintained, but there's an issue with cloning 
MapConfiguration objects.

When trying to convert using an interpolatedConfiguration:

{{Map expanded = 
ConfigurationConverter.getProperties(launchConfig.interpolatedConfiguration());}}

The following exception is thrown

{{org.apache.commons.configuration.ConfigurationRuntimeException: 
java.lang.reflect.InvocationTargetException at 
org.apache.commons.configuration.ConfigurationUtils.clone(ConfigurationUtils.java:325)
 at 
org.apache.commons.configuration.ConfigurationUtils.cloneConfiguration(ConfigurationUtils.java:282)
 at 
org.apache.commons.configuration.CombinedConfiguration.clone(CombinedConfiguration.java:670)
 at 
org.apache.commons.configuration.HierarchicalConfiguration.interpolatedConfiguration(HierarchicalConfiguration.java:937)
 at com.ascert.vt.launch.VtLauncher.launchFelix(VtLauncher.java:1220)  Caused 
by: java.lang.reflect.InvocationTargetException at 
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at 
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
 at 
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 at java.base/java.lang.reflect.Method.invoke(Method.java:566) at 
org.apache.commons.configuration.ConfigurationUtils.clone(ConfigurationUtils.java:311)
 ... 7 more Caused by: 
org.apache.commons.configuration.ConfigurationRuntimeException: 
java.lang.CloneNotSupportedException: 
org.apache.commons.configuration.MapConfiguration$1 does not implement 
Cloneable at 
org.apache.commons.configuration.MapConfiguration.clone(MapConfiguration.java:249)
 ... 12 more Caused by: java.lang.CloneNotSupportedException: 
org.apache.commons.configuration.MapConfiguration$1 does not implement 
Cloneable at 
org.apache.commons.configuration.ConfigurationUtils.clone(ConfigurationUtils.java:330)
 at 
org.apache.commons.configuration.MapConfiguration.clone(MapConfiguration.java:242)
 ... 12 more}}

The issue seems to be caused by extending AbstractMap as an anyonymous return 
class. From line 253 of MapConfiguration:

{{    /**}}
{{     * Helper method for copying all string keys from the given}}
{{     * \{@code Properties} object to a newly created map.}}
{{     *}}
{{     * @param props the \{@code Properties} to be copied}}
{{     * @return a newly created map with all string keys of the properties}}
{{     */}}
{{    private static Map<String, Object> convertPropertiesToMap(final 
Properties props)}}
{{    {}}
{{        return new AbstractMap<String, Object>() {}}{{            @Override}}
{{            public Set<Map.Entry<String, Object>> entrySet()}}



This class does not implement Cloneable as noted in the error message. Just 
looking for a decent solution, but returning some inner subclass which supports 
cloneable seems the way to go.

 

 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to