blob: d783d7e2936bf4dbd7d505ead4a2cc0bfbb53443 [file] [log] [blame]
package org.codehaus.jackson.jaxb;
import org.codehaus.jackson.*;
import org.codehaus.jackson.map.*;
import org.codehaus.jackson.map.deser.BeanDeserializer;
import org.codehaus.jackson.map.deser.BeanDeserializerModifier;
import org.codehaus.jackson.map.introspect.BasicBeanDescription;
import org.codehaus.jackson.xc.JaxbAnnotationIntrospector;
/**
* Unit test(s) for [JACKSON-472]
*/
public class TestDeserializerCaching extends BaseJaxbTest
{
/*
/**********************************************************
/* Helper beans
/**********************************************************
*/
static class MyBeanModule extends Module {
@Override public String getModuleName() {
return "MyBeanModule";
}
@Override public Version version() {
return new Version(1,0,0, null);
}
@Override public void setupModule(SetupContext context) {
context.addBeanDeserializerModifier(new MyBeanDeserializerModifier());
}
}
static class MyBeanDeserializer extends BeanDeserializer {
public MyBeanDeserializer(BeanDeserializer src) {
super(src);
}
}
static class MyBean {
public MyType value1;
public MyType value2;
public MyType value3;
}
static class MyType {
public String name;
public String value;
}
static class MyBeanDeserializerModifier extends BeanDeserializerModifier
{
static int count = 0;
@Override
public JsonDeserializer<?> modifyDeserializer(DeserializationConfig config,
BasicBeanDescription beanDesc, JsonDeserializer<?> deserializer)
{
if (MyType.class.isAssignableFrom(beanDesc.getBeanClass())) {
count++;
return new MyBeanDeserializer((BeanDeserializer)deserializer);
}
return super.modifyDeserializer(config, beanDesc, deserializer);
}
}
/*
/**********************************************************
/* Unit tests
/**********************************************************
*/
public void testCaching() throws Exception
{
final String JSON = "{\"value1\" : {\"name\" : \"fruit\", \"value\" : \"apple\"},\n"
+"\"value2\" : {\"name\" : \"color\", \"value\" : \"red\"},\n"
+"\"value3\" : {\"name\" : \"size\", \"value\" : \"small\"}}"
;
ObjectMapper mapper = new ObjectMapper();
mapper.setAnnotationIntrospector(new JaxbAnnotationIntrospector());
mapper.registerModule(new MyBeanModule());
mapper.readValue(JSON, MyBean.class);
assertEquals(1, MyBeanDeserializerModifier.count);
}
}