@Override
 public void close() throws IOException {
   try {
     if (xmlWriter != null) xmlWriter.close();
   } catch (XMLStreamException ignore) {
   } finally {
     super.close();
   }
 }
  @Override
  public void close() throws WriterException {
    // flush all remaining aggregated messages

    List<Entry<String, Message>> entries =
        new ArrayList<Entry<String, Message>>(aggregatedMap.entrySet());
    Collections.sort(
        entries,
        new Comparator<Entry<String, Message>>() {

          @Override
          public int compare(Entry<String, Message> o1, Entry<String, Message> o2) {
            return (int) (o1.getValue().getStartTime() - o2.getValue().getStartTime());
          }
        });

    for (Entry<String, Message> entry : entries) {
      processAggregatedMessage(entry.getValue(), entry.getValue());
    }
    aggregatedMap.clear();
    writer.close();
  }