Having problems to solve LiveObject raised exception, I try to reproduce problematic behavior based on Redisson test cases.
The minimal code I get to reproduce issue is this test case (mostly inspired from RedissonLiveObjectServiceTest.java):
public class LiveObjectTest { public static final String TEST_VALUE = "my test value"; public static final Integer TEST_INTEGER = 30; private RedissonClient redisson; @BeforeEach public void beforeEach () { Config config = new Config(); config.useSingleServer() .setAddress("http://127.0.0.1:6379"); redisson = Redisson.create(config); } @AfterEach public void afterEach () { redisson.shutdown(); } @Test @DisplayName("Test LiveObject with collection") public void testLiveObjectMap () { // Use Live Objects service RLiveObjectService service = redisson.getLiveObjectService(); service.registerClass(TestREntityWithMap.class); TestREntityWithMap createdObject = new TestREntityWithMap("testID2"); createdObject = service.persist(createdObject); RMap<Integer, String> map = redisson.getMap("testMap"); createdObject.setValue(map); map.put(TEST_INTEGER, TEST_VALUE); TestREntityWithMap updatedObject = service.get(TestREntityWithMap.class, "testID"); // Fails here to access updatedObject.getValue() assertEquals(TEST_VALUE, updatedObject.getValue().get(TEST_INTEGER)); } // Tested class @REntity public static class TestREntityWithMap implements Comparable<TestREntityWithMap> { @RId(generator = UUIDGenerator.class) private String name; private Map<Integer, String> value; public TestREntityWithMap (String name) { super(); this.name = name; } protected TestREntityWithMap () { super(); } public String getName () { return name; } public void setName (String name) { this.name = name; } public Map<Integer, String> getValue () { return value; } public void setValue (Map<Integer, String> value) { this.value = value; } @Override public int compareTo (TestREntityWithMap o) { return name.compareTo(o.name); } }}
This fails converting back the RedissonMap object to an RObject...
Should not it rather try to convert value property to standard java.util.Map ?
This looks like rather simple usage of the API, am I missing some point here ?
Here is my ObjectMapper setup for JsonJackson:
ObjectMapper mapper = new ObjectMapper(); mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); mapper.configure(MapperFeature.DEFAULT_VIEW_INCLUSION, true); mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); mapper.disable(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE); mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); mapper.configure(MapperFeature.SORT_PROPERTIES_ALPHABETICALLY, true); mapper.addMixIn(Throwable.class, JsonJacksonCodec.ThrowableMixIn.class); mapper.findAndRegisterModules(); mapper.registerModule(new JavaTimeModule());