blob: 76d297ae166a0f69b13900fb48fb45713fce9001 [file] [log] [blame]
package org.codehaus.jackson.jaxb;
import javax.xml.bind.annotation.*;
import org.codehaus.jackson.JsonNode;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.node.ObjectNode;
import org.codehaus.jackson.schema.JsonSchema;
/**
* Test(s) to see that JAXB annotations-based information is properly
* accessible and used by JSON Schema generation
*
* @author tatu
*/
public class TestSchemaGeneration extends BaseJaxbTest
{
/*
/**********************************************************
/* Helper beans
/**********************************************************
*/
@XmlAccessorType(XmlAccessType.FIELD)
protected static class Person {
public String firstName;
public String lastName;
@XmlElement(type=Address.class)
public IAddress address;
}
protected interface IAddress {
public String getCity();
public void setCity(String city);
}
protected static class Address implements IAddress {
private String city;
private String state;
@Override
public String getCity() { return city; }
@Override
public void setCity(String city) { this.city = city; }
public String getState() { return state; }
public void setState(String state) { this.state = state; }
}
/*
/**********************************************************
/* Tests
/**********************************************************
*/
/**
* Test for [JACKSON-415]
*
* @since 1.7
*/
public void testWithJaxb() throws Exception
{
ObjectMapper mapper = getJaxbMapper();
JsonSchema jsonSchema = mapper.generateJsonSchema(Address.class);
ObjectNode root = jsonSchema.getSchemaNode();
// should find two properties ("city", "state"), not just one...
JsonNode itemsNode = root.findValue("properties");
assertNotNull("Missing 'state' field", itemsNode.get("state"));
assertNotNull("Missing 'city' field", itemsNode.get("city"));
assertEquals(2, itemsNode.size());
}
}