}
@Override
protected void writeItem(Object item, MarshallingContext context,
HierarchicalStreamWriter writer) {
ClassAliasingMapper cam =
(ClassAliasingMapper) mapper().lookupMapperOfType( ClassAliasingMapper.class );
String elementName = cam.serializedClass( clazz );
if ( elementName == null ) {
elementName = cam.serializedClass( item.getClass() );
}
writer.startNode(elementName);
if(item != null) {
if(subclasses != null) {
Class theClass = null;
for (Class clazz : subclasses) {
if(clazz.isInstance(item)) {
theClass = clazz;
break;
}
}
if(theClass == null) {
throw new ConversionException("Unexpected item "
+ item + " whose type is not among: " + subclasses);
}
String typeName = cam.serializedClass( theClass );
writer.addAttribute("type", typeName);
}
context.convertAnother( item, new ReferenceConverter( clazz ) );
}