package com.fasterxml.jackson.databind.ser; import java.util.concurrent.atomic.AtomicReference; import com.fasterxml.jackson.databind.*; import com.fasterxml.jackson.databind.ser.BeanSerializerFactory; public class TestSerializerProvider extends com.fasterxml.jackson.databind.BaseMapTest { static class MyBean { public int getX() { return 3; } } static class NoPropsBean { } public void testFindExplicit() throws JsonMappingException { ObjectMapper mapper = new ObjectMapper(); SerializationConfig config = mapper.getSerializationConfig(); SerializerFactory f = new BeanSerializerFactory(null); DefaultSerializerProvider prov = new DefaultSerializerProvider.Impl().createInstance(config, f); // Should have working default key and null key serializers assertNotNull(prov.findKeySerializer(mapper.constructType(String.class), null)); assertNotNull(prov.getDefaultNullKeySerializer()); assertNotNull(prov.getDefaultNullValueSerializer()); // as well as 'unknown type' one (throws exception) assertNotNull(prov.getUnknownTypeSerializer(getClass())); assertTrue(prov.createInstance(config, f).hasSerializerFor(String.class, null)); // call twice to verify it'll be cached (second code path) assertTrue(prov.createInstance(config, f).hasSerializerFor(String.class, null)); assertTrue(prov.createInstance(config, f).hasSerializerFor(MyBean.class, null)); assertTrue(prov.createInstance(config, f).hasSerializerFor(MyBean.class, null)); // And then some negative testing AtomicReference<Throwable> cause = new AtomicReference<Throwable>(); assertFalse(prov.createInstance(config, f).hasSerializerFor(NoPropsBean.class, cause)); Throwable t = cause.get(); // no actual exception: just fails since there are no properties assertNull(t); } }