[
https://issues.apache.org/jira/browse/CXF-2056?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Dennis Kieselhorst updated CXF-2056:
------------------------------------
Attachment: cxf-testclient-1.0.0-SNAPSHOT.zip
> InstantiationException deserializing an 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
> Attachments: cxf-testclient-1.0.0-SNAPSHOT.zip,
> cxf-testserver-1.0.0-SNAPSHOT.zip
>
>
> 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.
> It even fails if the list is empty:
> <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.