/** 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 }