My entities such as:
@Entity
@Table(name = "AREA_DICTIONARY")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "AREA_TYPE")
public abstract class AreaDictionary<T extends AreaDictionary> extends AbstractDictionary {
private static final long serialVersionUID = 5785254299910289021L;
private T parent;
@ManyToOne(targetEntity = AreaDictionary.class)
@JoinColumn(name = "PARENT_ID")
public T getParent() {
return parent;
}
public void setParent(T parent) {
this.parent = parent;
}
}
@SuppressWarnings("unchecked")
@Entity
@DiscriminatorValue(value = "COUNTRY")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Country extends AreaDictionary {
private static final long serialVersionUID = -4517254994340586739L;
private String code;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
}
@Entity
@DiscriminatorValue(value = "PROVINCE")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Province extends AreaDictionary<Country> {
private static final long serialVersionUID = 2927795534905964608L;
private String code;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
}
@Entity
@DiscriminatorValue(value = "CITY")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class City extends AreaDictionary<Province> {
private static final long serialVersionUID = -2420747329423752178L;
private String code;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
}
exception :
org.granite.messaging.amf.io.convert.NoConverterFoundException: Cannot convert:
com.chinacache.oss.entity.dictionary.Country@22 to: T
at org.granite.messaging.amf.io.convert.Converters.getConverter(Converters.java:112)
at org.granite.messaging.amf.io.convert.Converters.convert(Converters.java:125)
at org.granite.hibernate.HibernateExternalizer.readExternal(HibernateExternalizer.java:112)
at org.granite.messaging.amf.io.AMF3Deserializer.readAMF3Object(AMF3Deserializer.java:355)
at org.granite.messaging.amf.io.AMF3Deserializer.readObject(AMF3Deserializer.java:118)
at org.granite.messaging.amf.io.AMF3Deserializer.readObject(AMF3Deserializer.java:87)
at org.granite.messaging.amf.io.AMF3Deserializer.readAMF3Array(AMF3Deserializer.java:253)
at org.granite.messaging.amf.io.AMF3Deserializer.readObject(AMF3Deserializer.java:116)
at org.granite.messaging.amf.io.AMF3Deserializer.readAMF3Object(AMF3Deserializer.java:380)
at org.granite.messaging.amf.io.AMF3Deserializer.readObject(AMF3Deserializer.java:118)
at org.granite.messaging.amf.io.AMF3Deserializer.readObject(AMF3Deserializer.java:87)
at org.granite.messaging.amf.io.AMF0Deserializer.readAMF3Data(AMF0Deserializer.java:324)
at org.granite.messaging.amf.io.AMF0Deserializer.readData(AMF0Deserializer.java:376)
at org.granite.messaging.amf.io.AMF0Deserializer.readArray(AMF0Deserializer.java:239)
at org.granite.messaging.amf.io.AMF0Deserializer.readData(AMF0Deserializer.java:362)
at org.granite.messaging.amf.io.AMF0Deserializer.readBodies(AMF0Deserializer.java:155)
at org.granite.messaging.amf.io.AMF0Deserializer.<init>(AMF0Deserializer.java:94)
Could you debug the org.granite.messaging.amf.io.convert.impl.Compatibility.canConvert(Object value, Type targetType) method to see what's happening with your real world example?
Thanks,
Franck.