Details
Description
I tried to marshal the following map with a nested map:
TreeMap<String, TreeMap<String, String>>
The result is this exception:
org.exolab.castor.mapping.MappingException: The return type for method public java.lang.Object org.exolab.castor.mapping.MapItem.getValue() does not match the declared field type java.util.Map
at org.exolab.castor.mapping.loader.AbstractMappingLoader.findAccessor(AbstractMappingLoader.java:991)
at org.exolab.castor.mapping.loader.AbstractMappingLoader.createFieldHandler(AbstractMappingLoader.java:744)
at org.exolab.castor.mapping.loader.AbstractMappingLoader.createFieldDesc(AbstractMappingLoader.java:550)
at org.exolab.castor.xml.XMLMappingLoader.createFieldDesc(XMLMappingLoader.java:371)
at org.exolab.castor.mapping.loader.AbstractMappingLoader.createFieldDescs(AbstractMappingLoader.java:440)
at org.exolab.castor.mapping.loader.AbstractMappingLoader.createDescriptor(AbstractMappingLoader.java:298)
at org.exolab.castor.xml.XMLMappingLoader.createDescriptor(XMLMappingLoader.java:228)
at org.exolab.castor.xml.XMLMappingLoader.createFieldDesc(XMLMappingLoader.java:483)
at org.exolab.castor.mapping.loader.AbstractMappingLoader.createFieldDescs(AbstractMappingLoader.java:440)
at org.exolab.castor.mapping.loader.AbstractMappingLoader.createDescriptor(AbstractMappingLoader.java:298)
at org.exolab.castor.xml.XMLMappingLoader.createDescriptor(XMLMappingLoader.java:228)
at org.exolab.castor.mapping.loader.AbstractMappingLoader.loadMappingInternal(AbstractMappingLoader.java:190)
at org.exolab.castor.mapping.loader.AbstractMappingLoader2.loadMapping(AbstractMappingLoader2.java:140)
at org.castor.mapping.MappingUnmarshaller.getMappingLoader(MappingUnmarshaller.java:132)
at org.castor.mapping.MappingUnmarshaller.getMappingLoader(MappingUnmarshaller.java:99)
at org.exolab.castor.xml.Marshaller.setMapping(Marshaller.java:565)
at explorations.TreeMapWithTreeMap.testMarshalling(TreeMapWithTreeMap.java:48)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at junit.framework.TestCase.runTest(TestCase.java:154)
at junit.framework.TestCase.runBare(TestCase.java:127)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:118)
at junit.framework.TestSuite.runTest(TestSuite.java:208)
at junit.framework.TestSuite.run(TestSuite.java:203)
at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:128)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
Issue Links
- is depended upon by
-
CASTOR-1584
Refactor AbstractMappingLoader
-
- relates to
-
CASTOR-1313
Cannot unmarshall HashMap with multivalued value
-
Thanks, Brian, for pointing this out. To be honest, I think that a solution should be possible without having to add new classes for collections and arrays. So let's address this through this issue (
CASTOR-1551) only for the time being.