Skip to content

Commit c2bc2aa

Browse files
author
Dennis Labordus
committed
Updated processing XSD Errors to response.
Signed-off-by: Dennis Labordus <[email protected]>
1 parent 4cc27f7 commit c2bc2aa

File tree

8 files changed

+86
-44
lines changed

8 files changed

+86
-44
lines changed

app/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,11 @@ SPDX-License-Identifier: Apache-2.0
127127
<artifactId>openpojo</artifactId>
128128
<scope>test</scope>
129129
</dependency>
130+
<dependency>
131+
<groupId>org.slf4j</groupId>
132+
<artifactId>slf4j-simple</artifactId>
133+
<scope>test</scope>
134+
</dependency>
130135
</dependencies>
131136

132137
<build>

app/src/test/java/org/lfenergy/compas/scl/validator/rest/v1/websocket/SclValidateResponseDecoderTest.java

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,16 +37,30 @@ void willDecode_WhenCalledWithNull_ThenFalseReturned() {
3737
@Test
3838
void decode_WhenCalledWithCorrectRequestXML_ThenStringConvertedToObject() {
3939
var validationMessage = "Some validation error";
40+
var ruleName = "Rule Name 1";
41+
var linenumber = 15;
42+
var columnNumber = 34;
43+
4044
var message = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
4145
+ "<svs:SclValidateResponse xmlns:svs=\"" + SCL_VALIDATOR_SERVICE_V1_NS_URI + "\">"
42-
+ "<svs:ValidationErrors><svs:Message>" + validationMessage + "</svs:Message></svs:ValidationErrors>"
46+
+ "<svs:ValidationErrors>"
47+
+ "<svs:Message>" + validationMessage + "</svs:Message>"
48+
+ "<svs:RuleName>" + ruleName + "</svs:RuleName>"
49+
+ "<svs:Linenumber>" + linenumber + "</svs:Linenumber>"
50+
+ "<svs:ColumnNumber>" + columnNumber + "</svs:ColumnNumber>"
51+
+ "</svs:ValidationErrors>"
4352
+ "</svs:SclValidateResponse>";
4453

4554
var result = decoder.decode(message);
4655

4756
assertNotNull(result);
4857
assertEquals(1, result.getValidationErrorList().size());
49-
assertEquals(validationMessage, result.getValidationErrorList().get(0).getMessage());
58+
59+
var validationError = result.getValidationErrorList().get(0);
60+
assertEquals(validationMessage, validationError.getMessage());
61+
assertEquals(ruleName, validationError.getRuleName());
62+
assertEquals(linenumber, validationError.getLinenumber());
63+
assertEquals(columnNumber, validationError.getColumnNumber());
5064
}
5165

5266
@Test

app/src/test/java/org/lfenergy/compas/scl/validator/rest/v1/websocket/SclValidateResponseEncoderTest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,15 @@ void encode_WhenCalledWithRequest_ThenRequestConvertedToString() {
3030
var validationMessage = "Some Validation Message";
3131
var ruleName = "Rule Name 1";
3232
var linenumber = 15;
33+
var columnNumber = 34;
3334

3435
var request = new SclValidateResponse();
3536
request.setValidationErrorList(new ArrayList<>());
3637
var validationError = new ValidationError();
3738
validationError.setMessage(validationMessage);
3839
validationError.setRuleName(ruleName);
3940
validationError.setLinenumber(linenumber);
41+
validationError.setColumnNumber(columnNumber);
4042
request.getValidationErrorList().add(validationError);
4143

4244
var result = encoder.encode(request);
@@ -47,6 +49,7 @@ void encode_WhenCalledWithRequest_ThenRequestConvertedToString() {
4749
"<svs:Message>" + validationMessage + "</svs:Message>" +
4850
"<svs:RuleName>" + ruleName + "</svs:RuleName>" +
4951
"<svs:Linenumber>" + linenumber + "</svs:Linenumber>" +
52+
"<svs:ColumnNumber>" + columnNumber + "</svs:ColumnNumber>" +
5053
"</svs:ValidationErrors>" +
5154
"</svs:SclValidateResponse>";
5255
assertNotNull(result);

pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,11 @@ SPDX-License-Identifier: Apache-2.0
111111
<version>3.0</version>
112112
</dependency>
113113

114+
<dependency>
115+
<groupId>org.slf4j</groupId>
116+
<artifactId>slf4j-api</artifactId>
117+
<version>${slf4j.version}</version>
118+
</dependency>
114119
<dependency>
115120
<groupId>org.slf4j</groupId>
116121
<artifactId>slf4j-simple</artifactId>

riseclipse/riseclipse-p2-to-m2/pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ SPDX-License-Identifier: Apache-2.0
3232
<version>2.7.4</version>
3333
<configuration>
3434
<work>${project.build.directory}/maven/tmp/cbi</work>
35+
<executionEnvironment>JavaSE-17</executionEnvironment>
3536

3637
<repositories>
3738
<repository>

validator/src/main/java/org/lfenergy/compas/scl/validator/model/ValidationError.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,12 @@ public class ValidationError {
3333
namespace = SCL_VALIDATOR_SERVICE_V1_NS_URI)
3434
private long linenumber;
3535

36+
@Schema(description = "The column number on the linenumber in the SCL file where the validation error occurred",
37+
example = "14")
38+
@XmlElement(name = "ColumnNumber",
39+
namespace = SCL_VALIDATOR_SERVICE_V1_NS_URI)
40+
private long columnNumber;
41+
3642
public String getMessage() {
3743
return message;
3844
}
@@ -56,4 +62,12 @@ public long getLinenumber() {
5662
public void setLinenumber(long linenumber) {
5763
this.linenumber = linenumber;
5864
}
65+
66+
public long getColumnNumber() {
67+
return columnNumber;
68+
}
69+
70+
public void setColumnNumber(long columnNumber) {
71+
this.columnNumber = columnNumber;
72+
}
5973
}

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

Lines changed: 36 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,6 @@
33
// SPDX-License-Identifier: Apache-2.0
44
package org.lfenergy.compas.scl.validator.xsd;
55

6-
import java.io.*;
7-
import java.util.List;
8-
9-
import javax.xml.XMLConstants;
10-
import javax.xml.transform.sax.SAXSource;
11-
import javax.xml.transform.stream.StreamSource;
12-
import javax.xml.validation.SchemaFactory;
13-
import javax.xml.validation.Validator;
14-
156
import org.lfenergy.compas.scl.validator.exception.SclValidatorException;
167
import org.lfenergy.compas.scl.validator.model.ValidationError;
178
import org.lfenergy.compas.scl.validator.xsd.resourceresolver.ResourceResolver;
@@ -22,18 +13,24 @@
2213
import org.xml.sax.SAXException;
2314
import org.xml.sax.SAXParseException;
2415

16+
import javax.xml.XMLConstants;
17+
import javax.xml.transform.sax.SAXSource;
18+
import javax.xml.transform.stream.StreamSource;
19+
import javax.xml.validation.SchemaFactory;
20+
import javax.xml.validation.Validator;
21+
import java.io.IOException;
22+
import java.io.StringReader;
23+
import java.util.List;
24+
2525
import static org.lfenergy.compas.scl.validator.exception.SclValidatorErrorCode.LOADING_XSD_FILE_ERROR_CODE;
2626

2727
public class XSDValidator {
2828
private static final Logger LOGGER = LoggerFactory.getLogger(XSDValidator.class);
2929

3030
private final Validator validator;
31-
32-
private final List<ValidationError> errorList;
3331
private final String sclData;
3432

3533
public XSDValidator(List<ValidationError> errorList, String sclData) {
36-
this.errorList = errorList;
3734
this.sclData = sclData;
3835

3936
var info = new SclInfo(sclData);
@@ -45,63 +42,63 @@ public XSDValidator(List<ValidationError> errorList, String sclData) {
4542
var schema = factory.newSchema(
4643
new StreamSource(getClass().getClassLoader().getResourceAsStream("xsd/SCL" + sclVersion + "/SCL.xsd")));
4744
validator = schema.newValidator();
48-
}
49-
catch (SAXException exception) {
45+
} catch (SAXException exception) {
5046
throw new SclValidatorException(LOADING_XSD_FILE_ERROR_CODE, exception.getMessage());
5147
}
5248

5349
validator.setErrorHandler(new ErrorHandler() {
5450
@Override
5551
public void warning(SAXParseException exception) {
56-
var validationError = addNewValidationError();
57-
var validationMessage = getXsdValidationMessage(exception);
52+
var validationError = createValidationError(exception);
53+
errorList.add(validationError);
5854

59-
validationError.setMessage(validationMessage);
60-
LOGGER.debug(validationMessage);
55+
LOGGER.debug("XSD Validation - warning: '{}' (Linenumber {}, Columnnumber {})",
56+
validationError.getMessage(),
57+
validationError.getLinenumber(),
58+
validationError.getColumnNumber());
6159
}
6260

6361
@Override
6462
public void error(SAXParseException exception) {
65-
var validationError = addNewValidationError();
66-
var validationMessage = getXsdValidationMessage(exception);
63+
var validationError = createValidationError(exception);
64+
errorList.add(validationError);
6765

68-
validationError.setMessage(validationMessage);
69-
LOGGER.debug(validationMessage);
66+
LOGGER.debug("XSD Validation - error: '{}' (Linenumber {}, Columnnumber {})",
67+
validationError.getMessage(),
68+
validationError.getLinenumber(),
69+
validationError.getColumnNumber());
7070
}
7171

7272
@Override
7373
public void fatalError(SAXParseException exception) {
74-
var validationError = addNewValidationError();
75-
var validationMessage = getXsdValidationMessage(exception);
74+
var validationError = createValidationError(exception);
75+
errorList.add(validationError);
7676

77-
validationError.setMessage(validationMessage);
78-
LOGGER.debug(validationMessage);
79-
LOGGER.debug("[XSD validation] fatal error for schema validation, stopping");
77+
LOGGER.debug("XSD Validation - fatal error, stopping: '{}' (Linenumber {}, Columnnumber {})",
78+
validationError.getMessage(),
79+
validationError.getLinenumber(),
80+
validationError.getColumnNumber());
8081
}
81-
} );
82+
});
8283
}
8384

8485
public void validate() {
8586
try {
8687
SAXSource source = new SAXSource(new InputSource(new StringReader(sclData)));
8788
validator.validate(source);
88-
}
89-
catch(IOException exception) {
89+
} catch (IOException exception) {
9090
LOGGER.error("[XSD validation] IOException: {}", exception.getMessage());
91-
}
92-
catch(SAXException exception) {
91+
} catch (SAXException exception) {
9392
LOGGER.error("[XSD validation] SAXException: {}", exception.getMessage());
9493
}
9594
}
9695

97-
private ValidationError addNewValidationError() {
96+
private ValidationError createValidationError(SAXParseException exception) {
9897
var validationError = new ValidationError();
99-
errorList.add(validationError);
98+
validationError.setMessage(exception.getMessage());
99+
validationError.setRuleName("XSD validation");
100+
validationError.setLinenumber(exception.getLineNumber());
101+
validationError.setColumnNumber(exception.getColumnNumber());
100102
return validationError;
101103
}
102-
103-
private String getXsdValidationMessage(SAXParseException exception) {
104-
return "[XSD validation] (line: " + exception.getLineNumber() + ", column: "
105-
+ exception.getColumnNumber() + "): " + exception.getMessage();
106-
}
107104
}

validator/src/test/java/org/lfenergy/compas/scl/validator/xsd/XSDValidatorTest.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@
1111
import java.nio.charset.StandardCharsets;
1212
import java.util.ArrayList;
1313

14-
import static org.junit.jupiter.api.Assertions.*;
14+
import static org.junit.jupiter.api.Assertions.assertEquals;
15+
import static org.junit.jupiter.api.Assertions.assertThrows;
1516
import static org.lfenergy.compas.scl.validator.exception.SclValidatorErrorCode.LOADING_XSD_FILE_ERROR_CODE;
1617

1718
class XSDValidatorTest {
@@ -38,8 +39,10 @@ void validate_WhenCalledWithSclDataWithXsdValidationErrors_ThenErrorsAreRetrieve
3839
assertEquals(4, errorList.size());
3940

4041
var error = errorList.get(2);
41-
assertEquals("[XSD validation] (line: 66, column: 45): cvc-complex-type.4: " +
42-
"Attribute 'name' must appear on element 'BDA'.",error.getMessage());
42+
assertEquals("cvc-complex-type.4: Attribute 'name' must appear on element 'BDA'.", error.getMessage());
43+
assertEquals("XSD validation", error.getRuleName());
44+
assertEquals(66, error.getLinenumber());
45+
assertEquals(45, error.getColumnNumber());
4346
}
4447
}
4548

0 commit comments

Comments
 (0)