blob: 54061617d04eac2b1907f120af0e7209d568d5db [file] [log] [blame]
package org.codehaus.jackson.jaxb;
import java.util.*;
import javax.xml.bind.annotation.*;
import org.codehaus.jackson.map.ObjectMapper;
/**
* @since 1.6
*/
public class TestXmlAnyElementWithElementRef
extends BaseJaxbTest
{
static class Bean {
@XmlAnyElement(lax=true)
@XmlElementRefs({
@XmlElementRef(name="a", type=Name.class),
@XmlElementRef(name="b", type=Count.class)
})
public List<Object> others;
public Bean() { }
public Bean(Object ob) {
others = new ArrayList<Object>();
others.add(ob);
}
}
static class Name {
public String name;
}
static class Count {
public int count;
}
/*
/**********************************************************
/* Test methods
/**********************************************************
*/
// [JACKSON-254]: verify that things do work
public void testXmlAnyElementWithElementRef() throws Exception
{
ObjectMapper mapper = getJaxbMapper();
Count count = new Count();
count.count = 8;
Bean value = new Bean(count);
// typed handling should be triggered by annotation on property, so
String json = mapper.writeValueAsString(value);
assertEquals("{\"others\":[{\"b\":{\"count\":8}}]}", json);
Bean result = mapper.readValue(json, Bean.class);
assertNotNull(result);
assertEquals(1, result.others.size());
Object resultOb = result.others.get(0);
assertSame(Count.class, resultOb.getClass());
assertEquals(8, ((Count) resultOb).count);
}
}