package org.neo4j.smack.serialization.strategy;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.neo4j.smack.serialization.SerializationException;
import org.neo4j.smack.serialization.SerializationStrategy;
import org.neo4j.smack.serialization.Serializer;
/**
* @author mh
* @since 27.11.11
*/
public class ExceptionSerializationStrategy implements SerializationStrategy<Throwable> {
@Override
public void serialize(Throwable exception, Serializer out) throws SerializationException {
Map<String, Object> result = new LinkedHashMap<String, Object>();
addMessage(exception, result);
addException(exception, result);
addStackTrace(exception, result);
out.putMap(result);
}
private void addException(Throwable exception, Map<String, Object> result) {
result.put("exception", exception.toString());
}
private void addMessage(Throwable exception, Map<String, Object> result) {
String message = exception.getMessage();
if (message == null) return;
result.put("message", message);
}
private void addStackTrace(Throwable exception, Map<String, Object> result) {
StackTraceElement[] trace = exception.getStackTrace();
if (trace == null) return;
List<String> list = new ArrayList<String>(trace.length);
for (StackTraceElement traceElement : trace) {
list.add(traceElement.toString());
}
result.put("stacktrace", list);
}
}