Hello, in the project I'm working on (a project based partly on CXF with
aegis), I've got trouble with complex databinding. The developer, who has
configured the cxf part, told me to send an email on the CXF mailing list about
the problem we had in order to see where and why it happens.
We want to be able to manage method with complex parameter like MyObject
* MyObject with class attributes
* String
* String
* ArrayList<HashMap,MySecondObject>
* MySecondObject with class attributes
* String
* String
* ArrayList<HashMap,Long>
But we have the following issue "org.apache.cxf.aegis.DatabindingException:
Couldn't instantiate class. null. Nested exception is
java.lang.InstantiationException: null
org.apache.cxf.binding.soap.SoapFault:" since ArrayList<HashMap,MySecondObject>
is not NULL.
I have simplified my example and I have the same issue with an HashMap of
HashMap of SimpleInDataBean (composed of two String parameters).
//KO
public void
manageHashMapOfHashMapOfSimpleInDataBean(HashMap<String,HashMap<String,SimpleInDataBean>>
myComplexData);
//OK
public void manageHashMapOfSimpleInDataBean(HashMap<String,SimpleInDataBean>
myComplexData);
Here is the error stack trace I got:
org.apache.cxf.aegis.DatabindingException: Couldn't instantiate class. null.
Nested exception is java.lang.InstantiationException: null
org.apache.cxf.binding.soap.SoapFault:
org.apache.cxf.aegis.DatabindingException: Couldn't instantiate class. null.
Nested exception is java.lang.InstantiationException: null
at
org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.handleMessage(Soap11FaultInInterceptor.java:70)
at
org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.handleMessage(Soap11FaultInInterceptor.java:35)
at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:221)
at
org.apache.cxf.interceptor.AbstractFaultChainInitiatorObserver.onMessage(AbstractFaultChainInitiatorObserver.java:96)
at
org.apache.cxf.binding.soap.interceptor.CheckFaultInterceptor.handleMessage(CheckFaultInterceptor.java:65)
at
org.apache.cxf.binding.soap.interceptor.CheckFaultInterceptor.handleMessage(CheckFaultInterceptor.java:34)
at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:221)
at org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:429)
at
org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:1996)
at
org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1832)
at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:66)
at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:591)
at
org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)
at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:221)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:276)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:222)
at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:73)
at org.apache.cxf.frontend.ClientProxy.invoke(ClientProxy.java:68)
at $Proxy12.manageHashMapOfHashMapOfSimpleInDataBean(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at
org.objectweb.fractal.bf.AbstractRemoteServiceCaller.invoke(AbstractRemoteServiceCaller.java:64)
at $Proxy12.manageHashMapOfHashMapOfSimpleInDataBean(Unknown Source)
at
org.objectweb.fractal.julia.generated.Cba88d802_0.manageHashMapOfHashMapOfSimpleInDataBean(INTERCEPTOR[WebService1Service])
at
org.objectweb.fractal.julia.generated.C345d7387_0.manageHashMapOfHashMapOfSimpleInDataBean(INTERFACE[WebService1Service])
at
com.edifixio.ecommerce.exemple.binding.service.webservice1.WebService1ServiceFcOutItf.manageHashMapOfHashMapOfSimpleInDataBean(WebService1ServiceFcOutItf.java:78)
at
com.edifixio.ecommerce.exemple.binding.service.webservice1.WebService1ServiceFcSR.manageHashMapOfHashMapOfSimpleInDataBean(WebService1ServiceFcSR.java:62)
at
com.edifixio.ecommerce.exemple.binding.application.binding.BindingApplicationImpl.manageHashMapOfHashMapOfSimpleInDataBean(BindingApplicationImpl.java:106)
at
com.edifixio.ecommerce.exemple.binding.application.binding.BindingApplicationInterceptorLCSCACCIntent.manageHashMapOfHashMapOfSimpleInDataBean(BindingApplicationInterceptorLCSCACCIntent.java:529)
at
com.edifixio.ecommerce.exemple.binding.application.binding.BindingApplicationFcItf.manageHashMapOfHashMapOfSimpleInDataBean(BindingApplicationFcItf.java:94)
at
com.edifixio.ecommerce.exemple.binding.test.service.webservice1.ManageHashMapOfHashMapOfSimpleInDataBeanTest.testManageHashMapOfHashMapOfSimpleInDataBean_SimpleInDataBeanEmpty(ManageHashMapOfHashMapOfSimpleInDataBeanTest.java:87)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at junit.framework.TestCase.runTest(TestCase.java:154)
Do not hesitate if you need more details
Best Regards,
Tomas and Jerome
PS : I've added to this message the structure of SimpleInDataBean in order to
show the structure of the object.
----------------------------------------
Tomas Darbois
Edifixio Grenoble - Projet ScorWare
04 76 29 89 29
[EMAIL PROTECTED]
/*
* Copyright 2008 by Edifixio - All right reserved
* Created on 1 oct. 08
* @author jbu
*/
package com.edifixio.ecommerce.exemple.binding.service.webservice1.inbean;
import com.edifixio.ecommerce.generic.util.bean.GenericBean;
/**
* Class SimpleInDataBean
* @author jbu
* @since 1 oct. 08 - 11:58:57
* @version Scorware
*/
public class SimpleInDataBean extends GenericBean{
/**
* Comment for <code>serialVersionUID</code>
*/
private static final long serialVersionUID = 7604853240090061594L;
private String simpleString;
private Long simpleLong;
/**
* Constructor SimpleInDataBean
* @author jbu
* @since 1 oct. 08 - 12:00:14
* @version Scorware
*/
public SimpleInDataBean(){
}
/**
* Method (overridden) toString
* @see com.edifixio.ecommerce.generic.util.bean.GenericBean#toString()
* @author jbu
* @since 1 oct. 08 - 12:00:01
* @version Scorware
* @return
*/
public String toString(){
startToString("simpleString",simpleString);
followToString("simpleLong",simpleLong);
return finaliseToString();
}
/**
* @return the simpleString
*/
public String getSimpleString() {
return simpleString;
}
/**
* @param simpleString the simpleString to set
*/
public void setSimpleString(String simpleString) {
this.simpleString = simpleString;
}
/**
* @return the simpleLong
*/
public Long getSimpleLong() {
return simpleLong;
}
/**
* @param simpleLong the simpleLong to set
*/
public void setSimpleLong(Long simpleLong) {
this.simpleLong = simpleLong;
}
}
/*
* Copyright 2008 by Edifixio - All right reserved
* Created on 23 janv. 08
* @author jbu
*/
package com.edifixio.ecommerce.generic.util.bean;
import java.io.Serializable;
public abstract class GenericBean implements Serializable{
/**
* Comment for <code>serialVersionUID</code>
*/
private static final long serialVersionUID = 4774498074095259612L;
private static final String TO_STRING_NOT_CORRECTLY_USED = "To String not correctly used for '";
private transient boolean toStringAsStarted = false;
private transient StringBuffer myDisplay;
/**
* Method (overridden) toString
* @see java.lang.Object#toString()
* @author jbu
* @since 15 janv. 08 - 11:52:38
* @version Scorware
* @return
*/
public abstract String toString();
/**
* Method startToString
* @author jbu
* @since 15 janv. 08 - 11:57:20
* @version Scorware
* @param name
* @param value
*/
protected void startToString(String name,Object value){
myDisplay = new StringBuffer("['");
myDisplay.append(getClass().getName());
myDisplay.append("@");
myDisplay.append(Integer.toHexString(hashCode()));
myDisplay.append("' : ");
myDisplay.append(name);
myDisplay.append(" = '");
myDisplay.append(value);
toStringAsStarted=true;
}
/**
* Method followToString
* @author jbu
* @since 15 janv. 08 - 12:01:01
* @version Scorware
* @param name
* @param value
*/
protected void followToString(String name,Object value){
if (toStringAsStarted){
myDisplay.append("', ");
myDisplay.append(name);
myDisplay.append(" = '");
myDisplay.append(value);
}
}
/**
* Method followToString
* @author jbu
* @since 26 juin 08 - 14:38:06
* @version Scorware
* @param name
* @param value
*/
protected void followToString(String name,Object[] value){
if (toStringAsStarted){
myDisplay.append("', ");
myDisplay.append(name);
myDisplay.append(" = [");
if (value!=null){
int size= value.length;
if (size>0){
myDisplay.append("'");
myDisplay.append(value[0]);
myDisplay.append("'");
for (int i=1;i<size;i++){
myDisplay.append(" - '");
myDisplay.append(value[i]);
myDisplay.append("'");
}
}
else {
myDisplay.append("EMPTY");
}
}
else {
myDisplay.append("NULL");
}
myDisplay.append("]");
}
}
/**
* Method finaliseToString
* @author jbu
* @since 15 janv. 08 - 12:22:25
* @version Scorware
* @return
*/
protected String finaliseToString(){
if (toStringAsStarted){
myDisplay.append("']");
return myDisplay.toString();
}
else {
return TO_STRING_NOT_CORRECTLY_USED+super.toString()+"'";
}
}
}