0

I am upgrading SB version from 2.7.12 to 3.0.8 and while upgrading i am getting the following error -

java.lang.StackOverflowError: null
       at org.springframework.data.mapping.model.ClassGeneratingPropertyAccessorFactory.getPropertyAccessor(ClassGeneratingPropertyAccessorFactory.java:82)
       at org.springframework.data.mapping.model.InstantiationAwarePropertyAccessorFactory.lambda$getPropertyAccessor$0(InstantiationAwarePropertyAccessorFactory.java:42)
       at org.springframework.data.mapping.model.InstantiationAwarePropertyAccessor.getProperty(InstantiationAwarePropertyAccessor.java:124)
       at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writeProperties(MappingMongoConverter.java:887)
       at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writeInternal(MappingMongoConverter.java:869)
       at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writePropertyInternal(MappingMongoConverter.java:1003)
       at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writeProperties(MappingMongoConverter.java:894)
       at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writeInternal(MappingMongoConverter.java:869)
       at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writePropertyInternal(MappingMongoConverter.java:1003)
       at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writeProperties(MappingMongoConverter.java:894)
       at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writeInternal(MappingMongoConverter.java:869)
       at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writePropertyInternal(MappingMongoConverter.java:1003)
       at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writeProperties(MappingMongoConverter.java:894)
       at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writeInternal(MappingMongoConverter.java:869)
       at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writePropertyInternal(MappingMongoConverter.java:1003)
       at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writeProperties(MappingMongoConverter.java:894)
       at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writeInternal(MappingMongoConverter.java:869)

I am using the joda.time to access the objects from mongo.

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.xxx.util.JodaDateTimeCustomDeserializer;
import com.xxx.util.JodaDateTimeCustomSerializer;

import org.joda.time.DateTime;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

import lombok.Data;

@Document(collection = "data")
@JsonIgnoreProperties(ignoreUnknown = true)
@Data
public class IMData
{
  @Id
  private String id;
  private String uid;
  @JsonSerialize(using = JodaDateTimeCustomSerializer.class)
  @JsonDeserialize(using = JodaDateTimeCustomDeserializer.class)
  private DateTime timestamp;
  @JsonSerialize(using = JodaDateTimeCustomSerializer.class)
  @JsonDeserialize(using = JodaDateTimeCustomDeserializer.class)
  private DateTime metaDataTimestamp;
  private String ioConfig;
  private int changeCount;
  private String inventoryDbId;
  private String hostname;
  private boolean isManual;
}

IMO, Stack overflow error should mean some circular dependency but the correct is not thrown by Springboot here.

R0512S
  • 53
  • 4
  • 1
    Is there a reason you are using Joda Time ? If not, you should switch to Java’s own java.time package (that was actually developed by the same guy who developed joda Time - and he recommends moving to java.time) - who knows, that may (I guess probably will) make that Stack Overflow error go away. https://stackoverflow.com/a/29768532/681444 – racraman Aug 09 '23 at 06:41

1 Answers1

0

Lombok @Data annotation includes @ToString and this makes circular reference on relation. If you don't need @ToString extract the @Data to @Getter @Setter etc. Or you just write on the field @ToString.exclude to prevent.

frxdude
  • 11
  • 1
  • 3