LenientValidationEventHandler.java
package com.hack23.cia.service.external.riksdagen.impl;
import javax.xml.bind.ValidationEvent;
import javax.xml.bind.ValidationEventHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Lenient validation event handler for XML parsing.
* Logs validation errors but allows parsing to continue for non-fatal issues.
* This is useful when dealing with external APIs that may have minor schema variations.
*/
public final class LenientValidationEventHandler implements ValidationEventHandler {
private static final Logger LOGGER = LoggerFactory.getLogger(LenientValidationEventHandler.class);
@Override
public boolean handleEvent(final ValidationEvent event) {
if (event == null) {
return true;
}
final int severity = event.getSeverity();
switch (severity) {
case ValidationEvent.WARNING:
LOGGER.debug("XML validation warning: {}", event.getMessage());
return true; // Continue parsing
case ValidationEvent.ERROR:
LOGGER.warn("XML validation error at line {}, column {}: {}",
event.getLocator() != null ? event.getLocator().getLineNumber() : "unknown",
event.getLocator() != null ? event.getLocator().getColumnNumber() : "unknown",
event.getMessage());
return true; // Continue parsing despite error
case ValidationEvent.FATAL_ERROR:
LOGGER.error("Fatal XML validation error: {}", event.getMessage(), event.getLinkedException());
return false; // Stop parsing
default:
LOGGER.info("Unknown validation event severity {}: {}", severity, event.getMessage());
return true;
}
}
}