Details
-
Type:
Bug
-
Status:
Closed
-
Priority:
Major
-
Resolution: Duplicate
-
Affects Version/s: 1.9.2, 1.9.3
-
Fix Version/s: None
-
Component/s: JAXB annotation handler
-
Labels:None
-
Environment:java-6-sun-1.6.0.26
-
Testcase included:yes
-
Number of attachments :
Description
Check attached test cases for details.
First test case is using JaxB to mashal an object that has @XmlJavaTypeAdapter on collection property and successfully produces xml output.
When I try to serialize the same object with Jackson I get:
org.codehaus.jackson.map.JsonMappingException: Unable to marshal: java.util.ArrayList cannot be cast to com.my.example.SerializingWithAdapterOnCollectionTest$B (through reference chain: com.my.example.A["bs"]) at org.codehaus.jackson.xc.XmlAdapterJsonSerializer.serialize(XmlAdapterJsonSerializer.java:40) at org.codehaus.jackson.map.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:446) at org.codehaus.jackson.map.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:150) at org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:112) at org.codehaus.jackson.map.ser.StdSerializerProvider._serializeValue(StdSerializerProvider.java:610) at org.codehaus.jackson.map.ser.StdSerializerProvider.serializeValue(StdSerializerProvider.java:256) at org.codehaus.jackson.map.ObjectMapper.writeValue(ObjectMapper.java:1606) at com.my.example.SerializingWithAdapterOnCollectionTest.jackson(SerializingWithAdapterOnCollectionTest.java:108) 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:597) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) at org.junit.runners.ParentRunner.run(ParentRunner.java:236) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) Caused by: java.lang.ClassCastException: java.util.ArrayList cannot be cast to com.my.example.SerializingWithAdapterOnCollectionTest$B at com.my.example.SerializingWithAdapterOnCollectionTest$BtoCAdapter.marshal(SerializingWithAdapterOnCollectionTest.java:1) at org.codehaus.jackson.xc.XmlAdapterJsonSerializer.serialize(XmlAdapterJsonSerializer.java:38) ... 30 more
If I move @XmlJavaTypeAdapter annotation from collection property to class B (type level), I get correct output. Unfortunately, in my real case class B is a third party class.
Activity
Tatu Saloranta
made changes -
| Field | Original Value | New Value |
|---|---|---|
| Resolution | Duplicate [ 3 ] | |
| Status | Open [ 1 ] | Closed [ 6 ] |
Thank you. I created https://github.com/FasterXML/jackson-module-jaxb-annotations/issues/3, as we are refactoring components into separate projects, and this is most likely due to JAXB annotation introspector.