### Question:
HypericAckProcessor implements AckProcessor { public static List<HypericAlertStatus> parseHypericAlerts(Reader reader) throws JAXBException, XMLStreamException { List<HypericAlertStatus> retval = new ArrayList<HypericAlertStatus>(); JAXBContext context = JAXBContext.newInstance(new Class[] { HypericAlertStatuses.class, HypericAlertStatus.class }); XMLInputFactory xmlif = XMLInputFactory.newInstance(); XMLEventReader xmler = xmlif.createXMLEventReader(reader); EventFilter filter = new EventFilter() { public boolean accept(XMLEvent event) { return event.isStartElement(); } }; XMLEventReader xmlfer = xmlif.createFilteredReader(xmler, filter); StartElement startElement = (StartElement)xmlfer.nextEvent(); String rootElementName = context.createJAXBIntrospector().getElementName(new HypericAlertStatuses()).getLocalPart(); if (rootElementName.equals(startElement.getName().getLocalPart())) { Unmarshaller unmarshaller = context.createUnmarshaller(); while (xmlfer.peek() != null) { Object object = unmarshaller.unmarshal(xmler); if (object instanceof HypericAlertStatus) { HypericAlertStatus alertStatus = (HypericAlertStatus)object; retval.add(alertStatus); } } } else { StringBuffer errorContent = new StringBuffer(); LineNumberReader lineReader = new LineNumberReader(reader); try { String line; while (true) { line = lineReader.readLine(); if (line == null) { break; } else { errorContent.append(line.trim()); } } } catch (IOException e) { errorContent.append("Exception while trying to print out message content: " + e.getMessage()); } throw new JAXBException("Found wrong root element in Hyperic XML document, expected: \"" + rootElementName + "\", found \"" + startElement.getName().getLocalPart() + "\"\n" + errorContent.toString()); } return retval; }  void reloadConfigs(); List<OnmsAlarm> fetchUnclearedHypericAlarms(); String getUrlForHypericSource(String source); void run(); static OnmsAlarm findAlarmForHypericAlert(List<OnmsAlarm> alarms, String platformId, HypericAlertStatus alert); static String getAlertSourceParmValue(OnmsAlarm alarm); static String getAlertIdParmValue(OnmsAlarm alarm); static String getParmValueByRegex(OnmsAlarm alarm, String regex); static List<HypericAlertStatus> fetchHypericAlerts(String hypericUrl, List<String> alertIds); static List<HypericAlertStatus> parseHypericAlerts(Reader reader); synchronized void setAckdConfigDao(final AckdConfigurationDao configDao); synchronized void setAckService(final AckService ackService); @Override void afterPropertiesSet(); synchronized void setAlarmDao(final AlarmDao dao); static final String READER_NAME_HYPERIC; static final String PARAMETER_PREFIX_HYPERIC_SOURCE; static final int ALERTS_PER_HTTP_TRANSACTION; }### Answer:
@Test public void testParseHypericAlerts() throws Exception { LineNumberReader reader = new LineNumberReader(new InputStreamReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("hqu/opennms/alertStatus/list.hqu"), "UTF-8")); reader.mark(4000); try { while(true) { String line = reader.readLine(); if (line == null) { break; } else { System.out.println(line); } } } catch (IOException e) { } reader.reset(); List<HypericAckProcessor.HypericAlertStatus> alerts = HypericAckProcessor.parseHypericAlerts(reader); assertEquals(5, alerts.size()); for (HypericAckProcessor.HypericAlertStatus alert : alerts) { System.out.println(alert.toString()); } }