Class<InterfaceWithMap> iwithMapClass = InterfaceWithMap.class;
Method method = iwithMapClass.getMethod("mapFunction");
Type mapType = method.getGenericReturnType();
AegisTestBean bean = new AegisTestBean();
bean.setBoolValue(Boolean.TRUE);
bean.setStrValue("hovercraft");
AegisSuperBean bean2 = new AegisSuperBean();
bean2.setBoolValue(Boolean.TRUE);
bean2.setStrValue("hovercraft2");
testMap.put(bean, bean2);
MessageBodyWriter<Map<AegisTestBean, AegisSuperBean>> writer
= new AegisElementProvider<Map<AegisTestBean, AegisSuperBean>>();
ByteArrayOutputStream os = new ByteArrayOutputStream();
writer.writeTo(testMap, testMap.getClass(), mapType, new Annotation[]{},
MediaType.APPLICATION_OCTET_STREAM_TYPE,
new MetadataMap<String, Object>(), os);
byte[] bytes = os.toByteArray();
String xml = new String(bytes, "utf-8");
MessageBodyReader<Map<AegisTestBean, AegisSuperBean>> reader
= new AegisElementProvider<Map<AegisTestBean, AegisSuperBean>>();
byte[] simpleBytes = xml.getBytes("utf-8");
Map<AegisTestBean, AegisSuperBean> map2 = reader.readFrom(null, mapType, new Annotation[]{},
MediaType.APPLICATION_OCTET_STREAM_TYPE,
new MetadataMap<String, String>(),
new ByteArrayInputStream(simpleBytes));
assertEquals(1, map2.size());
Map.Entry<AegisTestBean, AegisSuperBean> entry = map2.entrySet().iterator().next();
AegisTestBean bean1 = entry.getKey();
assertEquals("hovercraft", bean1.getStrValue());
assertEquals(Boolean.TRUE, bean1.getBoolValue());
AegisTestBean bean22 = entry.getValue();
assertEquals("hovercraft2", bean22.getStrValue());
assertEquals(Boolean.TRUE, bean22.getBoolValue());
}