InstantiationException deserializing an empty collection with abstract type
---------------------------------------------------------------------------
Key: CXF-2056
URL: https://issues.apache.org/jira/browse/CXF-2056
Project: CXF
Issue Type: Bug
Components: Aegis Databinding
Affects Versions: 2.1.3, 2.1.5
Environment: Windows XP, Java 1.5
Reporter: Dennis Kieselhorst
I have a CustomerAccount class with a list of CustomerContract.
CustomerContract contains a list of the abstract type CustomerProduct. The
concrete types are configured using rootClassNames in the AegisContext on
server side. Everything works unless this list is empty.
In this case the soap response look like this:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns1:getCustomerAccountResponse xmlns:ns1="http://service.mydomain.tld/">
<ns1:return>
<ns2:accountNumber
xmlns:ns2="http://container.service.mydomain.tld">12345</ns2:accountNumber>
<ns2:contracts xmlns:ns2="http://container.service.mydomain.tld">
<ns2:CustomerContract>
<ns2:contractId>15</ns2:contractId>
<ns2:contractRef ns3:nil="true"
xmlns:ns3="http://www.w3.org/2001/XMLSchema-instance"/>
<ns2:packageId>377</ns2:packageId>
<ns2:products/><!-- the empty list element -->
</ns2:CustomerContract>
</ns2:contracts>
</ns1:return>
</ns1:getCustomerAccountResponse>
</soap:Body>
</soap:Envelope>
Deserialization fails with the following exception:
org.apache.cxf.phase.PhaseInterceptorChain doIntercept
INFO: Interceptor has thrown exception, unwinding now Couldn't instantiate
class. null. Nested exception is java.lang.InstantiationException: null
org.apache.cxf.interceptor.Fault: Couldn't instantiate class. null. Nested
exception is java.lang.InstantiationException: null
at
org.apache.cxf.aegis.databinding.XMLStreamDataReader.read(XMLStreamDataReader.java:49)
at
org.apache.cxf.aegis.databinding.XMLStreamDataReader.read(XMLStreamDataReader.java:34)
at
org.apache.cxf.interceptor.DocLiteralInInterceptor.getPara(DocLiteralInInterceptor.java:235)
at
org.apache.cxf.interceptor.DocLiteralInInterceptor.handleMessage(DocLiteralInInterceptor.java:120)
at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:226)
at org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:641)
at
org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:2106)
at
org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:1984)
at
org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1909)
at
org.apache.cxf.io.CacheAndWriteOutputStream.postClose(CacheAndWriteOutputStream.java:47)
at
org.apache.cxf.io.CachedOutputStream.close(CachedOutputStream.java:170)
at
org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:66)
at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:601)
at
org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)
at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:226)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:469)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:299)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:251)
at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:73)
at org.apache.cxf.frontend.ClientProxy.invoke(ClientProxy.java:68)
at $Proxy27.getCustomerAccount(Unknown Source)
(...)
Caused by: org.apache.cxf.aegis.DatabindingException: Couldn't instantiate
class. null. Nested exception is java.lang.InstantiationException: null
at
org.apache.cxf.aegis.type.basic.BeanType.readObject(BeanType.java:171)
at
org.apache.cxf.aegis.type.basic.ArrayType.readCollection(ArrayType.java:86)
at
org.apache.cxf.aegis.type.collection.CollectionType.readObject(CollectionType.java:52)
at
org.apache.cxf.aegis.type.basic.BeanType.readObject(BeanType.java:151)
at
org.apache.cxf.aegis.type.basic.ArrayType.readCollection(ArrayType.java:86)
at
org.apache.cxf.aegis.type.collection.CollectionType.readObject(CollectionType.java:52)
at
org.apache.cxf.aegis.type.basic.BeanType.readObject(BeanType.java:151)
at
org.apache.cxf.aegis.AegisXMLStreamDataReader.read(AegisXMLStreamDataReader.java:82)
at
org.apache.cxf.aegis.databinding.XMLStreamDataReader.read(XMLStreamDataReader.java:47)
... 55 more
Caused by: java.lang.InstantiationException
at
sun.reflect.InstantiationExceptionConstructorAccessorImpl.newInstance(InstantiationExceptionConstructorAccessorImpl.java:30)
at java.lang.reflect.Constructor.newInstance(Constructor.java:494)
at java.lang.Class.newInstance0(Class.java:350)
at java.lang.Class.newInstance(Class.java:303)
at
org.apache.cxf.aegis.type.basic.BeanType.readObject(BeanType.java:121)
... 63 more
If I remove the abstract from the CustomerProduct class, everything works fine.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.