Skip to content

Commit b93192a

Browse files
author
Dennis Labordus
committed
Moved ErrorHandler to separate class to make it testable.
Signed-off-by: Dennis Labordus <[email protected]>
1 parent feb7556 commit b93192a

File tree

3 files changed

+122
-35
lines changed

3 files changed

+122
-35
lines changed
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
// SPDX-FileCopyrightText: 2022 Alliander N.V.
2+
//
3+
// SPDX-License-Identifier: Apache-2.0
4+
package org.lfenergy.compas.scl.validator.xsd;
5+
6+
import org.lfenergy.compas.scl.validator.model.ValidationError;
7+
import org.slf4j.Logger;
8+
import org.slf4j.LoggerFactory;
9+
import org.xml.sax.ErrorHandler;
10+
import org.xml.sax.SAXParseException;
11+
12+
import java.util.List;
13+
14+
public class XSDErrorHandler implements ErrorHandler {
15+
private static final Logger LOGGER = LoggerFactory.getLogger(XSDErrorHandler.class);
16+
17+
private List<ValidationError> errorList;
18+
19+
public XSDErrorHandler(List<ValidationError> errorList) {
20+
this.errorList = errorList;
21+
}
22+
23+
@Override
24+
public void warning(SAXParseException exception) {
25+
var validationError = createValidationError(exception);
26+
errorList.add(validationError);
27+
28+
LOGGER.debug("XSD Validation - warning: '{}' (Linenumber {}, Column number {})",
29+
validationError.getMessage(),
30+
validationError.getLinenumber(),
31+
validationError.getColumnNumber());
32+
}
33+
34+
@Override
35+
public void error(SAXParseException exception) {
36+
var validationError = createValidationError(exception);
37+
errorList.add(validationError);
38+
39+
LOGGER.debug("XSD Validation - error: '{}' (Linenumber {}, Column number {})",
40+
validationError.getMessage(),
41+
validationError.getLinenumber(),
42+
validationError.getColumnNumber());
43+
}
44+
45+
@Override
46+
public void fatalError(SAXParseException exception) {
47+
var validationError = createValidationError(exception);
48+
errorList.add(validationError);
49+
50+
LOGGER.debug("XSD Validation - fatal error, stopping: '{}' (Linenumber {}, Column number {})",
51+
validationError.getMessage(),
52+
validationError.getLinenumber(),
53+
validationError.getColumnNumber());
54+
}
55+
56+
private ValidationError createValidationError(SAXParseException exception) {
57+
var validationError = new ValidationError();
58+
validationError.setMessage(exception.getMessage());
59+
validationError.setRuleName("XSD validation");
60+
validationError.setLinenumber(exception.getLineNumber());
61+
validationError.setColumnNumber(exception.getColumnNumber());
62+
return validationError;
63+
}
64+
}

validator/src/main/java/org/lfenergy/compas/scl/validator/xsd/XSDValidator.java

Lines changed: 1 addition & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,8 @@
88
import org.lfenergy.compas.scl.validator.xsd.resourceresolver.ResourceResolver;
99
import org.slf4j.Logger;
1010
import org.slf4j.LoggerFactory;
11-
import org.xml.sax.ErrorHandler;
1211
import org.xml.sax.InputSource;
1312
import org.xml.sax.SAXException;
14-
import org.xml.sax.SAXParseException;
1513

1614
import javax.xml.XMLConstants;
1715
import javax.xml.transform.sax.SAXSource;
@@ -42,26 +40,10 @@ public XSDValidator(List<ValidationError> errorList, String sclData) {
4240
var schema = factory.newSchema(
4341
new StreamSource(getClass().getClassLoader().getResourceAsStream("xsd/SCL" + sclVersion + "/SCL.xsd")));
4442
validator = schema.newValidator();
43+
validator.setErrorHandler(new XSDErrorHandler(errorList));
4544
} catch (SAXException exception) {
4645
throw new SclValidatorException(LOADING_XSD_FILE_ERROR_CODE, exception.getMessage());
4746
}
48-
49-
validator.setErrorHandler(new ErrorHandler() {
50-
@Override
51-
public void warning(SAXParseException exception) {
52-
errorList.add(createValidationError(exception, "warning"));
53-
}
54-
55-
@Override
56-
public void error(SAXParseException exception) {
57-
errorList.add(createValidationError(exception, "error"));
58-
}
59-
60-
@Override
61-
public void fatalError(SAXParseException exception) {
62-
errorList.add(createValidationError(exception, "fatal"));
63-
}
64-
});
6547
}
6648

6749
public void validate() {
@@ -72,20 +54,4 @@ public void validate() {
7254
LOGGER.error("[XSD validation] Exception: {}", exception.getMessage());
7355
}
7456
}
75-
76-
private ValidationError createValidationError(SAXParseException exception, String type) {
77-
var validationError = new ValidationError();
78-
validationError.setMessage(exception.getMessage());
79-
validationError.setRuleName("XSD validation");
80-
validationError.setLinenumber(exception.getLineNumber());
81-
validationError.setColumnNumber(exception.getColumnNumber());
82-
83-
LOGGER.debug("XSD Validation - {}: '{}' (Linenumber {}, Column number {})",
84-
type,
85-
validationError.getMessage(),
86-
validationError.getLinenumber(),
87-
validationError.getColumnNumber());
88-
89-
return validationError;
90-
}
9157
}
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package org.lfenergy.compas.scl.validator.xsd;
2+
3+
import org.junit.jupiter.api.Test;
4+
import org.lfenergy.compas.scl.validator.model.ValidationError;
5+
import org.xml.sax.SAXParseException;
6+
7+
import java.util.ArrayList;
8+
import java.util.List;
9+
10+
import static org.junit.jupiter.api.Assertions.assertEquals;
11+
12+
class XSDErrorHandlerTest {
13+
private List<ValidationError> errorList = new ArrayList<>();
14+
private XSDErrorHandler handler = new XSDErrorHandler(errorList);
15+
16+
@Test
17+
void warning_WhenCalled_ThenNewValidationErrorAddedToList() {
18+
var message = "Some Warning Message";
19+
var linenumber = 3;
20+
var columnNumber = 15;
21+
22+
handler.warning(new SAXParseException(message, "", "", linenumber, columnNumber));
23+
24+
assertEquals(1, errorList.size());
25+
assertValidationError(errorList.get(0), message, linenumber, columnNumber);
26+
}
27+
28+
@Test
29+
void error_WhenCalled_ThenNewValidationErrorAddedToList() {
30+
var message = "Some Error Message";
31+
var linenumber = 5;
32+
var columnNumber = 25;
33+
34+
handler.error(new SAXParseException(message, "", "", linenumber, columnNumber));
35+
36+
assertEquals(1, errorList.size());
37+
assertValidationError(errorList.get(0), message, linenumber, columnNumber);
38+
}
39+
40+
@Test
41+
void fatalError_WhenCalled_ThenNewValidationErrorAddedToList() {
42+
var message = "Some Error Message";
43+
var linenumber = 5;
44+
var columnNumber = 25;
45+
46+
handler.fatalError(new SAXParseException(message, "", "", linenumber, columnNumber));
47+
48+
assertEquals(1, errorList.size());
49+
assertValidationError(errorList.get(0), message, linenumber, columnNumber);
50+
}
51+
52+
private void assertValidationError(ValidationError validationError, String message, int linenumber, int columnNumber) {
53+
assertEquals(message, validationError.getMessage());
54+
assertEquals(linenumber, validationError.getLinenumber());
55+
assertEquals(columnNumber, validationError.getColumnNumber());
56+
}
57+
}

0 commit comments

Comments
 (0)