-
Notifications
You must be signed in to change notification settings - Fork 529
Closed
Description
here is test code
package com.jsoniter;
import static java.util.Objects.isNull;
import com.jsoniter.spi.DecodingMode;
import com.jsoniter.spi.JsonException;
import com.jsoniter.spi.JsoniterSpi;
import java.util.Date;
import junit.framework.TestCase;
public class TestSpiTypeDecoder extends TestCase {
static {
JsoniterSpi.registerTypeEncoder(Date.class, ((obj, stream) -> {
try {
stream.writeVal(((Date) obj).getTime());
} catch (Exception e) {
throw new RuntimeException(e);
}
}));
JsoniterSpi.registerTypeDecoder(Date.class, (iter) -> {
try {
Object value = iter.read();
if (isNull(value)) {
return null;
} else if (value instanceof Number) {
return new Date(((Number) value).longValue());
} else {
throw new RuntimeException("decode error");
}
} catch (JsonException e) {
throw new RuntimeException(e);
}
});
JsonIterator.setMode(DecodingMode.REFLECTION_MODE);
}
public static class Foo {
private Date createdAt = new Date();
public Date getCreatedAt() {
return createdAt;
}
@Override
public String toString() {
return "Foo{" +
"createdAt=" + createdAt +
'}';
}
}
public void test_foo() {
System.out.println(JsonIterator.deserialize("{\"createdAt\":1196676930321}", Foo.class));
System.out.println(JsonIterator.deserialize("{\"createdAt\":1196676930321}", Foo.class));
}
}exception:
Foo{createdAt=Mon Dec 03 18:15:30 CST 2007}
java.lang.IllegalArgumentException: Can not set java.util.Date field com.jsoniter.TestSpiTypeDecoder$Foo.createdAt to java.util.Date
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:167)
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:171)
at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.java:58)
at sun.reflect.UnsafeObjectFieldAccessorImpl.get(UnsafeObjectFieldAccessorImpl.java:36)
at java.lang.reflect.Field.get(Field.java:393)
at com.jsoniter.ReflectionObjectDecoder.decodeBinding(ReflectionObjectDecoder.java:382)
at com.jsoniter.ReflectionObjectDecoder.access$700(ReflectionObjectDecoder.java:10)
at com.jsoniter.ReflectionObjectDecoder$OnlyField.decode_(ReflectionObjectDecoder.java:153)
at com.jsoniter.ReflectionObjectDecoder$OnlyField.decode(ReflectionObjectDecoder.java:119)
at com.jsoniter.JsonIterator.read(JsonIterator.java:385)
at com.jsoniter.JsonIterator.read(JsonIterator.java:375)
at com.jsoniter.JsonIterator.deserialize(JsonIterator.java:441)
at com.jsoniter.JsonIterator.deserialize(JsonIterator.java:411)
at com.jsoniter.TestSpiTypeDecoder.test_foo(TestSpiTypeDecoder.java:57)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at junit.framework.TestCase.runTest(TestCase.java:176)
at junit.framework.TestCase.runBare(TestCase.java:141)
at junit.framework.TestResult$1.protect(TestResult.java:122)
at junit.framework.TestResult.runProtected(TestResult.java:142)
at junit.framework.TestResult.run(TestResult.java:125)
at junit.framework.TestCase.run(TestCase.java:129)
at junit.framework.TestSuite.runTest(TestSuite.java:252)
at junit.framework.TestSuite.run(TestSuite.java:247)
at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:86)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels