package edu.harvard.med.screensaver.rest; import org.apache.log4j.Logger; import com.thoughtworks.xstream.converters.MarshallingContext; import com.thoughtworks.xstream.io.HierarchicalStreamWriter; public class ErrorConverter extends RestConverter { private static final Logger log = Logger.getLogger(ErrorConverter.class); public static class ErrorContainer { public Exception e; public String message; public ErrorContainer(Exception e) { this.e = e; } public ErrorContainer(String message) { this.message = message; } public ErrorContainer(Exception e, String message) { this.e = e; this.message = message; } } @Override public boolean canConvert(Class type) { return ErrorContainer.class.isAssignableFrom(type); } @Override public void marshal(Object source, HierarchicalStreamWriter writer, MarshallingContext context) { final XStreamUtil util = new XStreamUtil(writer, context, getEntityUriGenerator()); Exception e = ((ErrorContainer)source).e; String errMsg = ((ErrorContainer)source).message; if(e != null) { log.warn("Exception in controller", e); util.writeNode(e.getClass(), "exception"); util.writeNode(e.getMessage(), "exceptionMessage"); } if(errMsg != null) { log.error("Error in controller: " + errMsg); util.writeNode(errMsg, "errorMessage"); } } }