/** tests house. This one has things like nillable and required properties. */ public void testHouse() throws Exception { House house = new House(); Rectangle base = new Rectangle(); base.setColor(Color.BLUE); base.setHeight(80); base.setWidth(80); base.setLineStyle(LineStyle.solid); base.setId("baseid"); house.setBase(base); Rectangle door = new Rectangle(); door.setColor(Color.YELLOW); door.setHeight(35); door.setWidth(20); door.setLineStyle(LineStyle.solid); door.setId("doorId"); house.setDoor(door); Circle knob = new Circle(); knob.setColor(Color.RED); knob.setId("knobId"); knob.setLineStyle(LineStyle.dashed); knob.setRadius(2); house.setDoorKnob(knob); Label label1 = new Label(); label1.setValue("bachelor-pad"); Label label2 = new Label(); label2.setValue("single-family-dwelling"); house.setLabels(Arrays.asList(label1, label2)); Triangle roof = new Triangle(); roof.setBase(84); roof.setHeight(20); roof.setColor(Color.YELLOW); roof.setLineStyle(LineStyle.solid); house.setRoof(roof); Rectangle window = new Rectangle(); window.setColor(Color.YELLOW); window.setHeight(10); window.setWidth(10); window.setLineStyle(LineStyle.solid); house.setWindows(Arrays.asList(window)); house.setConstructedDate(new DateTime(3L)); house.setType(XmlQNameEnumUtil.toQName(HouseType.brick)); house.setStyle(XmlQNameEnumUtil.toQName(HouseStyle.latin)); house.setColor(XmlQNameEnumUtil.toURI(HouseColor.blue)); JacksonJaxbJsonProvider provider = new JacksonJaxbJsonProvider(); ObjectMapper houseMapper = provider.locateMapper(House.class, MediaType.APPLICATION_JSON_TYPE); ObjectMapper clientMapper = new ObjectMapper(); ByteArrayOutputStream out = new ByteArrayOutputStream(); houseMapper.writeValue(out, house); ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray()); shapes.json.structures.House clientHouse = clientMapper.readValue(in, shapes.json.structures.House.class); shapes.json.Rectangle clientBase = clientHouse.getBase(); assertSame(shapes.json.Color.BLUE, clientBase.getColor()); assertSame(shapes.json.LineStyle.solid, clientBase.getLineStyle()); assertEquals(80, clientBase.getHeight()); assertEquals(80, clientBase.getWidth()); assertEquals("baseid", clientBase.getId()); shapes.json.Rectangle clientDoor = clientHouse.getDoor(); assertSame(shapes.json.Color.YELLOW, clientDoor.getColor()); assertSame(shapes.json.LineStyle.solid, clientDoor.getLineStyle()); assertEquals(35, clientDoor.getHeight()); assertEquals(20, clientDoor.getWidth()); assertEquals("doorId", clientDoor.getId()); shapes.json.Circle clientKnob = clientHouse.getDoorKnob(); assertSame(shapes.json.Color.RED, clientKnob.getColor()); assertSame(shapes.json.LineStyle.dashed, clientKnob.getLineStyle()); assertEquals(2, clientKnob.getRadius()); assertEquals("knobId", clientKnob.getId()); List<String> labels = Arrays.asList("bachelor-pad", "single-family-dwelling"); clientHouse.getLabels().size(); for (Object l : clientHouse.getLabels()) { shapes.json.Label label = (shapes.json.Label) l; assertTrue(labels.contains(label.getValue())); } shapes.json.Triangle clientRoof = clientHouse.getRoof(); assertSame(shapes.json.Color.YELLOW, clientRoof.getColor()); assertSame(shapes.json.LineStyle.solid, clientRoof.getLineStyle()); assertNull(clientRoof.getId()); assertEquals(84, clientRoof.getBase()); assertEquals(20, clientRoof.getHeight()); assertEquals(1, clientHouse.getWindows().size()); shapes.json.Rectangle clientWindow = (shapes.json.Rectangle) clientHouse.getWindows().get(0); assertSame(shapes.json.Color.YELLOW, clientWindow.getColor()); assertSame(shapes.json.LineStyle.solid, clientWindow.getLineStyle()); assertEquals(10, clientWindow.getHeight()); assertEquals(10, clientWindow.getWidth()); assertNull(clientWindow.getId()); assertEquals(new Date(3L), clientHouse.getConstructedDate()); out = new ByteArrayOutputStream(); clientMapper.writeValue(out, clientHouse); house = houseMapper.readValue(new ByteArrayInputStream(out.toByteArray()), House.class); base = house.getBase(); assertSame(Color.BLUE, base.getColor()); assertSame(LineStyle.solid, base.getLineStyle()); assertEquals(80, base.getHeight()); assertEquals(80, base.getWidth()); assertEquals("baseid", base.getId()); door = house.getDoor(); assertSame(Color.YELLOW, door.getColor()); assertSame(LineStyle.solid, door.getLineStyle()); assertEquals(35, door.getHeight()); assertEquals(20, door.getWidth()); assertEquals("doorId", door.getId()); knob = house.getDoorKnob(); assertSame(Color.RED, knob.getColor()); assertSame(LineStyle.dashed, knob.getLineStyle()); assertEquals(2, knob.getRadius()); assertEquals("knobId", knob.getId()); labels = Arrays.asList("bachelor-pad", "single-family-dwelling"); house.getLabels().size(); for (Object l : house.getLabels()) { Label label = (Label) l; assertTrue(labels.contains(label.getValue())); } roof = house.getRoof(); assertSame(Color.YELLOW, roof.getColor()); assertSame(LineStyle.solid, roof.getLineStyle()); assertNull(roof.getId()); assertEquals(84, roof.getBase()); assertEquals(20, roof.getHeight()); assertEquals(1, house.getWindows().size()); window = house.getWindows().get(0); assertSame(Color.YELLOW, window.getColor()); assertSame(LineStyle.solid, window.getLineStyle()); assertEquals(10, window.getHeight()); assertEquals(10, window.getWidth()); assertNull(window.getId()); assertEquals(new DateTime(3L), house.getConstructedDate()); assertEquals(XmlQNameEnumUtil.toQName(HouseType.brick), house.getType()); assertEquals(XmlQNameEnumUtil.toQName(HouseStyle.latin), house.getStyle()); assertEquals(XmlQNameEnumUtil.toURI(HouseColor.blue), house.getColor()); // now let's check the nillable and required stuff: // roof is required, but nillable. clientHouse.setRoof(null); out = new ByteArrayOutputStream(); clientMapper.writeValue(out, clientHouse); house = houseMapper.readValue(new ByteArrayInputStream(out.toByteArray()), House.class); base = house.getBase(); assertSame(Color.BLUE, base.getColor()); assertSame(LineStyle.solid, base.getLineStyle()); assertEquals(80, base.getHeight()); assertEquals(80, base.getWidth()); assertEquals("baseid", base.getId()); door = house.getDoor(); assertSame(Color.YELLOW, door.getColor()); assertSame(LineStyle.solid, door.getLineStyle()); assertEquals(35, door.getHeight()); assertEquals(20, door.getWidth()); assertEquals("doorId", door.getId()); knob = house.getDoorKnob(); assertSame(Color.RED, knob.getColor()); assertSame(LineStyle.dashed, knob.getLineStyle()); assertEquals(2, knob.getRadius()); assertEquals("knobId", knob.getId()); labels = Arrays.asList("bachelor-pad", "single-family-dwelling"); house.getLabels().size(); for (Object l : house.getLabels()) { Label label = (Label) l; assertTrue(labels.contains(label.getValue())); } roof = house.getRoof(); assertNull(roof); assertEquals(1, house.getWindows().size()); window = house.getWindows().get(0); assertSame(Color.YELLOW, window.getColor()); assertSame(LineStyle.solid, window.getLineStyle()); assertEquals(10, window.getHeight()); assertEquals(10, window.getWidth()); assertNull(window.getId()); // windows are nillable... clientHouse.setWindows(null); out = new ByteArrayOutputStream(); clientMapper.writeValue(out, clientHouse); house = houseMapper.readValue(new ByteArrayInputStream(out.toByteArray()), House.class); base = house.getBase(); assertSame(Color.BLUE, base.getColor()); assertSame(LineStyle.solid, base.getLineStyle()); assertEquals(80, base.getHeight()); assertEquals(80, base.getWidth()); assertEquals("baseid", base.getId()); door = house.getDoor(); assertSame(Color.YELLOW, door.getColor()); assertSame(LineStyle.solid, door.getLineStyle()); assertEquals(35, door.getHeight()); assertEquals(20, door.getWidth()); assertEquals("doorId", door.getId()); knob = house.getDoorKnob(); assertSame(Color.RED, knob.getColor()); assertSame(LineStyle.dashed, knob.getLineStyle()); assertEquals(2, knob.getRadius()); assertEquals("knobId", knob.getId()); labels = Arrays.asList("bachelor-pad", "single-family-dwelling"); house.getLabels().size(); for (Object l : house.getLabels()) { Label label = (Label) l; assertTrue(labels.contains(label.getValue())); } roof = house.getRoof(); assertNull(roof); assertNull(house.getWindows()); }
/** tests bus. This one has an element wrapper. */ public void testBus() throws Exception { Bus bus = new Bus(); bus.setId("some bus"); Label cityBus = new Label(); cityBus.setValue("city"); Label countryBus = new Label(); countryBus.setValue("country"); Label longDistanceBus = new Label(); longDistanceBus.setValue("long-distance"); bus.setId("bus id"); bus.setLabels(Arrays.asList(cityBus, countryBus, longDistanceBus)); Rectangle door = new Rectangle(); door.setColor(Color.BLUE); door.setWidth(2); door.setHeight(4); door.setLineStyle(LineStyle.solid); bus.setDoor(door); Rectangle frame = new Rectangle(); frame.setHeight(10); frame.setWidth(50); frame.setColor(Color.YELLOW); frame.setLineStyle(LineStyle.solid); bus.setFrame(frame); Circle front = new Circle(); front.setColor(Color.BLUE); front.setLineStyle(LineStyle.dotted); front.setRadius(6); Circle back = new Circle(); back.setColor(Color.BLUE); back.setLineStyle(LineStyle.dotted); back.setRadius(7); bus.setWheels(new Circle[] {front, back}); Rectangle window1 = new Rectangle(); window1.setColor(Color.BLUE); window1.setWidth(2); window1.setHeight(2); window1.setLineStyle(LineStyle.solid); Rectangle window2 = new Rectangle(); window2.setColor(Color.BLUE); window2.setWidth(2); window2.setHeight(2); window2.setLineStyle(LineStyle.solid); Rectangle window3 = new Rectangle(); window3.setColor(Color.BLUE); window3.setWidth(2); window3.setHeight(2); window3.setLineStyle(LineStyle.solid); bus.setWindows(Arrays.asList(window1, window2, window3)); Map<Integer, Circle> riders = new HashMap<Integer, Circle>(); Circle rider3 = new Circle(); rider3.setRadius(3); riders.put(3, rider3); Circle rider4 = new Circle(); rider4.setRadius(4); riders.put(4, rider4); bus.setType(XmlQNameEnumUtil.toQName(BusType.charter)); JacksonJaxbJsonProvider provider = new JacksonJaxbJsonProvider(); ObjectMapper busMapper = provider.locateMapper(Bus.class, MediaType.APPLICATION_JSON_TYPE); ObjectMapper clientMapper = new ObjectMapper(); ByteArrayOutputStream out = new ByteArrayOutputStream(); busMapper.writeValue(out, bus); ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray()); shapes.json.vehicles.Bus clientBus = clientMapper.readValue(in, shapes.json.vehicles.Bus.class); assertEquals("bus id", clientBus.getId()); ArrayList<String> labels = new ArrayList<String>(Arrays.asList("city", "country", "long-distance")); for (Object l : clientBus.getLabels()) { shapes.json.Label label = (shapes.json.Label) l; assertTrue(labels.remove(label.getValue())); } shapes.json.Rectangle clientDoor = clientBus.getDoor(); assertSame(shapes.json.Color.BLUE, clientDoor.getColor()); assertEquals(2, clientDoor.getWidth()); assertEquals(4, clientDoor.getHeight()); assertSame(shapes.json.LineStyle.solid, clientDoor.getLineStyle()); shapes.json.Rectangle clientFrame = clientBus.getFrame(); assertEquals(10, clientFrame.getHeight()); assertEquals(50, clientFrame.getWidth()); assertSame(shapes.json.Color.YELLOW, clientFrame.getColor()); assertSame(shapes.json.LineStyle.solid, clientFrame.getLineStyle()); shapes.json.Circle[] clientWheels = clientBus.getWheels(); assertEquals(2, clientWheels.length); assertEquals(6, clientWheels[0].getRadius()); assertSame(shapes.json.Color.BLUE, clientWheels[0].getColor()); assertSame(shapes.json.LineStyle.dotted, clientWheels[0].getLineStyle()); assertEquals(7, clientWheels[1].getRadius()); assertSame(shapes.json.Color.BLUE, clientWheels[1].getColor()); assertSame(shapes.json.LineStyle.dotted, clientWheels[1].getLineStyle()); shapes.json.Rectangle[] clientWindows = (shapes.json.Rectangle[]) clientBus.getWindows().toArray(new shapes.json.Rectangle[3]); assertEquals(2, clientWindows[0].getWidth()); assertEquals(2, clientWindows[0].getHeight()); assertEquals(shapes.json.Color.BLUE, clientWindows[0].getColor()); assertEquals(shapes.json.LineStyle.solid, clientWindows[0].getLineStyle()); assertEquals(2, clientWindows[1].getWidth()); assertEquals(2, clientWindows[1].getHeight()); assertEquals(shapes.json.Color.BLUE, clientWindows[1].getColor()); assertEquals(shapes.json.LineStyle.solid, clientWindows[1].getLineStyle()); assertEquals(2, clientWindows[2].getWidth()); assertEquals(2, clientWindows[2].getHeight()); assertEquals(shapes.json.Color.BLUE, clientWindows[2].getColor()); assertEquals(shapes.json.LineStyle.solid, clientWindows[2].getLineStyle()); out = new ByteArrayOutputStream(); clientMapper.writeValue(out, clientBus); bus = busMapper.readValue(new ByteArrayInputStream(out.toByteArray()), Bus.class); door = bus.getDoor(); assertSame(Color.BLUE, door.getColor()); assertEquals(2, door.getWidth()); assertEquals(4, door.getHeight()); assertSame(LineStyle.solid, door.getLineStyle()); frame = bus.getFrame(); assertEquals(10, frame.getHeight()); assertEquals(50, frame.getWidth()); assertSame(Color.YELLOW, frame.getColor()); assertSame(LineStyle.solid, frame.getLineStyle()); Circle[] wheels = bus.getWheels(); assertEquals(2, wheels.length); assertEquals(6, wheels[0].getRadius()); assertSame(Color.BLUE, wheels[0].getColor()); assertSame(LineStyle.dotted, wheels[0].getLineStyle()); assertEquals(7, wheels[1].getRadius()); assertSame(Color.BLUE, wheels[1].getColor()); assertSame(LineStyle.dotted, wheels[1].getLineStyle()); Rectangle[] windows = bus.getWindows().toArray(new Rectangle[3]); assertEquals(2, windows[0].getWidth()); assertEquals(2, windows[0].getHeight()); assertEquals(Color.BLUE, windows[0].getColor()); assertEquals(LineStyle.solid, windows[0].getLineStyle()); assertEquals(2, windows[1].getWidth()); assertEquals(2, windows[1].getHeight()); assertEquals(Color.BLUE, windows[1].getColor()); assertEquals(LineStyle.solid, windows[1].getLineStyle()); assertEquals(2, windows[2].getWidth()); assertEquals(2, windows[2].getHeight()); assertEquals(Color.BLUE, windows[2].getColor()); assertEquals(LineStyle.solid, windows[2].getLineStyle()); assertEquals(BusType.charter, XmlQNameEnumUtil.fromQName(bus.getType(), BusType.class)); // todo: test an element wrapper around elementRefs }