	@Test
	public void testTemplate() throws IOException, IllegalArgumentException, IllegalAccessException, InstantiationException {

		ObjectMapper mapper = new ObjectMapper();
		Set<Class<?>> classes = Sets.<Class<?>>newHashSet(TemplateObject.class);
		
		Map<String, Object> template = JSONDocTemplateBuilder.build(TemplateObject.class, classes);

		Assert.assertEquals(0, template.get("my_id"));
		Assert.assertEquals(0, template.get("idint"));
		Assert.assertEquals(0, template.get("idlong"));
		Assert.assertEquals("", template.get("name"));
		Assert.assertEquals("", template.get("gender"));
		Assert.assertEquals(true, template.get("bool"));
		Assert.assertEquals(new ArrayList(), template.get("intarrarr"));
		Assert.assertEquals(new JSONDocTemplate(), template.get("sub_obj"));
		Assert.assertEquals(new ArrayList(), template.get("untypedlist"));
		Assert.assertEquals(new ArrayList(), template.get("subsubobjarr"));
		Assert.assertEquals(new ArrayList(), template.get("stringlist"));
		Assert.assertEquals(new ArrayList(), template.get("stringarrarr"));
		Assert.assertEquals(new ArrayList(), template.get("integerarr"));
		Assert.assertEquals(new ArrayList(), template.get("stringarr"));
		Assert.assertEquals(new ArrayList(), template.get("intarr"));
		Assert.assertEquals(new ArrayList(), template.get("subobjlist"));
		Assert.assertEquals(new ArrayList(), template.get("wildcardlist"));
		Assert.assertEquals(new ArrayList(), template.get("longlist"));
		Assert.assertEquals("", template.get("namechar"));
		Assert.assertEquals(new HashMap(), template.get("map"));
		Assert.assertEquals(new HashMap(), template.get("mapstringinteger"));
		Assert.assertEquals(new HashMap(), template.get("mapsubobjinteger"));
		Assert.assertEquals(new HashMap(), template.get("mapintegersubobj"));
		Assert.assertEquals(new HashMap(), template.get("mapintegerlistsubsubobj"));
		
		System.out.println(mapper.writeValueAsString(template));
	}