public static List<MessageResult.Header> createHeaders(final Message<?> document) throws IOException {
final List<MessageResult.Header> results = new ArrayList<MessageResult.Header>();
MimeEntityConfig config = new MimeEntityConfig();
config.setMaxLineLen(-1);
final MimeStreamParser parser = new MimeStreamParser(config);
parser.setContentHandler(new AbstractContentHandler() {
@Override
public void endHeader() {
parser.stop();
}
@Override
public void field(Field field) throws MimeException {
String fieldValue = field.getBody();
if (fieldValue.endsWith("\r\f")) {
fieldValue = fieldValue.substring(0,fieldValue.length() - 2);
}
if (fieldValue.startsWith(" ")) {
fieldValue = fieldValue.substring(1);
}
final ResultHeader resultHeader = new ResultHeader(field.getName(), fieldValue);
results.add(resultHeader);
}
});
try {
// add the header seperator to the stream to mime4j don't log a warning
parser.parse(new SequenceInputStream(document.getHeaderContent(), new ByteArrayInputStream(BYTES_NEW_LINE)));
} catch (MimeException e) {
throw new IOException("Unable to parse headers of message " + document, e);
}
return results;
}