private static Chunk parseChunk(final XMLStreamReader reader) throws XMLStreamException { final Chunk chunk = new Chunk(); chunk.setCheckpointPolicy(getAttributeValue(reader, XmlAttribute.CHECKPOINT_POLICY, false)); chunk.setItemCount(getAttributeValue(reader, XmlAttribute.ITEM_COUNT, false)); chunk.setTimeLimit(getAttributeValue(reader, XmlAttribute.TIME_LIMIT, false)); chunk.setSkipLimit(getAttributeValue(reader, XmlAttribute.SKIP_LIMIT, false)); chunk.setRetryLimit(getAttributeValue(reader, XmlAttribute.RETRY_LIMIT, false)); while (reader.hasNext()) { final int eventType = reader.next(); if (eventType != START_ELEMENT && eventType != END_ELEMENT) { continue; } final XmlElement element = XmlElement.forName(reader.getLocalName()); switch (eventType) { case START_ELEMENT: switch (element) { case READER: chunk.setReader(parseRefArtifact(reader, XmlElement.READER)); break; case PROCESSOR: chunk.setProcessor(parseRefArtifact(reader, XmlElement.PROCESSOR)); break; case WRITER: chunk.setWriter(parseRefArtifact(reader, XmlElement.WRITER)); break; case CHECKPOINT_ALGORITHM: chunk.setCheckpointAlgorithm( parseRefArtifact(reader, XmlElement.CHECKPOINT_ALGORITHM)); break; case SKIPPABLE_EXCEPTION_CLASSES: chunk.setSkippableExceptionClasses( parseExceptionClassFilter(reader, XmlElement.SKIPPABLE_EXCEPTION_CLASSES)); break; case RETRYABLE_EXCEPTION_CLASSES: chunk.setRetryableExceptionClasses( parseExceptionClassFilter(reader, XmlElement.RETRYABLE_EXCEPTION_CLASSES)); break; case NO_ROLLBACK_EXCEPTION_CLASSES: chunk.setNoRollbackExceptionClasses( parseExceptionClassFilter(reader, XmlElement.NO_ROLLBACK_EXCEPTION_CLASSES)); break; default: throw BatchLogger.LOGGER.unexpectedXmlElement( reader.getLocalName(), reader.getLocation()); } break; case END_ELEMENT: if (element == XmlElement.CHUNK) { return chunk; } else { throw BatchLogger.LOGGER.unexpectedXmlElement( reader.getLocalName(), reader.getLocation()); } } } throw BatchLogger.LOGGER.unexpectedXmlElement(reader.getLocalName(), reader.getLocation()); }