[ 
https://issues.apache.org/jira/browse/CONFIGURATION-837?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Rob Walker updated CONFIGURATION-837:
-------------------------------------
    Attachment: MapConfiguration.java

> 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
>            Priority: Major
>         Attachments: MapConfiguration.java
>
>
> Note sure if 1.10 is actively maintained, but there's an issue with cloning 
> MapConfiguration objects.
> When trying to convert using an interpolatedConfiguration:
>  
> {code:java}
> Map expanded = 
> ConfigurationConverter.getProperties(launchConfig.interpolatedConfiguration());
>  
> {code}
> The following exception is thrown
>  
> {code:java}
> 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
>  
> {code}
> The issue seems to be caused by extending AbstractMap as an anyonymous return 
> class. From line 253 of MapConfiguration:
>  
> {code:java}
>     /**
>      * 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()
>  
> {code}
> This class does not implement Cloneable as noted in the error message.
> Don't really know the rest of the code well enough to know whether it could 
> just return a cloneable subclass here (such as HashMap) or if that's not the 
> best way to go as that then becomes a mutable Map which AbstractMap is not. I 
> guess another approach would be to create an inner class based on this which 
> supports Cloneable and implements a manual clone() method, but nothing else.
>  
>  



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

Reply via email to