@Override
public void marshal(Object source, HierarchicalStreamWriter writer, MarshallingContext context) {
super.marshal(source, writer, context);
if (source instanceof DcsMetadata) {
final DcsMetadata md = (DcsMetadata) source;
final String schemaUri = md.getSchemaUri();
final String metadataBlob = md.getMetadata();
if (!isEmptyOrNull(metadataBlob)) {
if (!isEmptyOrNull(schemaUri)) {
writer.addAttribute(A_SCHEMA, schemaUri);
}
try {
final DcsStaxWriter staxWriter = (DcsStaxWriter) writer.underlyingWriter();
log.trace("Copying metadata blob: \n{}", metadataBlob);
staxWriter.copyNode(metadataBlob, staxWriter.getXMLStreamWriter());
} catch (XMLStreamException e) {
throw new ConversionException(e.getMessage(), e);
}
}
} else if (source instanceof DcsMetadataRef) {
final DcsMetadataRef mdRef = (DcsMetadataRef) source;
final String ref = mdRef.getRef();
if (!isEmptyOrNull(ref)) {
writer.addAttribute(A_REF, ref);
}
} else {
log.warn("Unable to marshal metadata source object {} of type {}", source, source.getClass().getName());
}
}