jeudi 9 avril 2015

Mongo java.lang.IllegalArgumentException: can't serialize class java.lang.Class

I'm using Java+Spring+MongoTemplate+MongoDB. If I wanna to insert object into my MongoDB then I've got error:



java.lang.IllegalArgumentException: can't serialize class java.lang.Class


Here is my mongo-context.xml:



<mongo:mongo id="mongoLocal" host="${local.mongo.host}" port="${local.mongo.port}">
<mongo:options
connections-per-host="700"
threads-allowed-to-block-for-connection-multiplier="100"
connect-timeout="15000"
auto-connect-retry="true"
socket-timeout="60000"
write-number="1"/>
</mongo:mongo>

<mongo:db-factory id="mongoDbFactoryLocal" dbname="${local.mongo.db}" mongo-ref="mongoLocal"/>

<bean id="mongoConverterLocal" class="org.springframework.data.mongodb.core.convert.MappingMongoConverter">
<constructor-arg index="0" ref="mongoDbFactoryLocal" />
<constructor-arg index="1">
<bean class="org.springframework.data.mongodb.core.mapping.MongoMappingContext" />
</constructor-arg>
<property name="mapKeyDotReplacement" value="\+"/>
</bean>

<bean id="mongoTemplateLocal" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg name="mongoDbFactory" ref="mongoDbFactoryLocal"/>
<constructor-arg name="mongoConverter" ref="mongoConverterLocal"/>
</bean>


mongo-context.xml I imported to spring-context.xml and use it like:



<bean id="statusDao" class="com.status.StatusDAOImpl">
</bean>

<bean id="BasicDAO" class="com.status.PreparableDAO">
<property name="daos">
<list>
<ref bean="statusDao"/>
</list>
</property>
<property name="template" ref="mongoTemplateLocal"/>
</bean>


And finally class (SimpleMessage) that I'm trying to insert into Mongo:



public abstract class Message implements Serializable {

@Id
private String id;

public Message() {super();}

public Message(String id) {
this.id = id;
}

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}


}


and



@Document


public class SimpleMessage extends Message {



private Date arriveDateTime;

public SimpleMessage() {
super("unknown");
this.arriveDateTime = new Date();
}

public SimpleMessage(String id) {
super(id);
this.arriveDateTime = new Date();
}

public Date getArriveDateTime() {
return arriveDateTime;
}

public void setArriveDateTime(Date arriveDateTime) {
this.arriveDateTime = arriveDateTime;
}

@Override
public String toString() {
return new StringBuffer("EmlFile: [")
.append("id: ")
.append(getId())
.append("; date: ")
.append(arriveDateTime)
.append("]")
.toString();
}

@Override
public int hashCode() {
int hash = ThreadLocalRandom.current().nextInt(1000);
hash = hash * 31 + (getId() == null ?
"".hashCode() : getId().hashCode());
hash = hash
+ (arriveDateTime == null ? 0 : arriveDateTime.hashCode());

return hash;
}

@Override
public boolean equals(Object obj) {
if (this == obj)
return true;

if (!(obj instanceof EmlMessage))
return false;

SimpleMessage otherA = (SimpleMessage) obj;
return getId().equals(otherA.getId());
}


}


Any idea? I know that I can extends BasicDBObject, but why I need to do it if I implemented MongoMappingConverter.


Aucun commentaire:

Enregistrer un commentaire