[
https://issues.apache.org/jira/browse/CXF-2056?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Dennis Kieselhorst updated CXF-2056:
------------------------------------
Description:
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.
was:
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.
Summary: InstantiationException deserializing an collection with
abstract type (was: InstantiationException deserializing an empty collection
with abstract type)
> 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
>
> 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.