Quantcast
Channel: Active questions tagged redis+java - Stack Overflow
Viewing all articles
Browse latest Browse all 2204

ClassNotFoundException: No RObject is found to match class type of org.redisson.RedissonMap with codec type of org.redisson.codec.JsonJacksonCodec

$
0
0

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());

Viewing all articles
Browse latest Browse all 2204

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>