You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
public class Demo {
public static void main(String[] args) {
final OffsetDateTime defaultDateTime = OffsetDateTime.MIN;
DemoMetadata demoMetadata = DemoMetadata.builder()
.metadataType("TestType")
.lastMetadataRefreshTime(defaultDateTime)
.build();
Map<String, DemoMetadata> map = new HashMap<>();
map.put(demoMetadata.getMetadataType(), demoMetadata);
DemoRoot demoRoot = DemoRoot.builder()
.rootName("Root")
.lastMetadataRefreshTime(defaultDateTime)
.dmoToDaoTypeMapping(map)
.build();
JSONObject jsonObject = (JSONObject) JSON.toJSON(demoRoot);
System.out.println(jsonObject);
DemoRoot updatedRoot = jsonObject.toJavaObject(DemoRoot.class);
System.out.println(updatedRoot);
}
}
@Data
@SuperBuilder
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class DemoRoot extends DemoAbstract{
private static final long serialVersionUID = 1L;
private String rootName;
private Map<String, DemoMetadata> dmoToDaoTypeMapping;
@Override
public void someFunction() {
}
}
@Data
@SuperBuilder
@Generated
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@ToString
public class DemoMetadata extends DemoAbstract{
private static final long serialVersionUID = 1L;
private String metadataType;
@Override
public void someFunction() {
}
}
@SuperBuilder
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public abstract class DemoAbstract implements Serializable {
private static final long serialVersionUID = 1L;
@EqualsAndHashCode.Exclude private OffsetDateTime lastMetadataRefreshTime;
public abstract void someFunction();
}
Exception -
Exception in thread "main" java.time.format.DateTimeParseException: Text '-999999999-01-01T00:00:00' could not be parsed at index 25
at java.base/java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:2046)
at java.base/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1948)
at java.base/java.time.ZonedDateTime.parse(ZonedDateTime.java:598)
at java.base/java.time.ZonedDateTime.parse(ZonedDateTime.java:583)
at com.alibaba.fastjson2.JSONReader.readZonedDateTime(JSONReader.java:1187)
at com.alibaba.fastjson2.JSONReaderUTF8.readOffsetDateTime(JSONReaderUTF8.java:5429)
at com.alibaba.fastjson2.reader.ORG_2_2_DemoMetadata.readObject(Unknown Source)
at com.alibaba.fastjson2.reader.ObjectReaderImplMapTyped.readObject(ObjectReaderImplMapTyped.java:373)
at com.alibaba.fastjson2.reader.FieldReader.acceptAny(FieldReader.java:437)
at com.alibaba.fastjson2.reader.ObjectReaderAdapter.createInstance(ObjectReaderAdapter.java:615)
at com.alibaba.fastjson2.JSONObject.to(JSONObject.java:1248)
at com.alibaba.fastjson2.JSONObject.toJavaObject(JSONObject.java:1258)
at daytodaycode.Demo.main(Demo.java:34)
##FastJson2 dependency
com.alibaba.fastjson2
fastjson2
2.0.34
Why does this happen? DemoRoot updatedRoot = jsonObject.toJavaObject(DemoRoot.class);
The toJavaObject converts the private Map<String, DemoMetadata> dmoToDaoTypeMapping, to jsonString first and then converts it back to the exact class. This happens in the FieldReader class.
While doing JSON.toJsonString(), calls goes to JSONWriterUTF16.writeOffsetDateTime().
Class code -
Exception -
Exception in thread "main" java.time.format.DateTimeParseException: Text '-999999999-01-01T00:00:00' could not be parsed at index 25
at java.base/java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:2046)
at java.base/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1948)
at java.base/java.time.ZonedDateTime.parse(ZonedDateTime.java:598)
at java.base/java.time.ZonedDateTime.parse(ZonedDateTime.java:583)
at com.alibaba.fastjson2.JSONReader.readZonedDateTime(JSONReader.java:1187)
at com.alibaba.fastjson2.JSONReaderUTF8.readOffsetDateTime(JSONReaderUTF8.java:5429)
at com.alibaba.fastjson2.reader.ORG_2_2_DemoMetadata.readObject(Unknown Source)
at com.alibaba.fastjson2.reader.ObjectReaderImplMapTyped.readObject(ObjectReaderImplMapTyped.java:373)
at com.alibaba.fastjson2.reader.FieldReader.acceptAny(FieldReader.java:437)
at com.alibaba.fastjson2.reader.ObjectReaderAdapter.createInstance(ObjectReaderAdapter.java:615)
at com.alibaba.fastjson2.JSONObject.to(JSONObject.java:1248)
at com.alibaba.fastjson2.JSONObject.toJavaObject(JSONObject.java:1258)
at daytodaycode.Demo.main(Demo.java:34)
##FastJson2 dependency
com.alibaba.fastjson2
fastjson2
2.0.34
Why does this happen?
DemoRoot updatedRoot = jsonObject.toJavaObject(DemoRoot.class);
The toJavaObject converts the private Map<String, DemoMetadata> dmoToDaoTypeMapping, to jsonString first and then converts it back to the exact class. This happens in the FieldReader class.
While doing JSON.toJsonString(), calls goes to JSONWriterUTF16.writeOffsetDateTime().
In the else block the off variable is not incremented. It should have been like this,
This has been my analysis so far. In my local after doing the above change, the initial code works.
The text was updated successfully, but these errors were encountered: