3
3
// SPDX-License-Identifier: Apache-2.0
4
4
package org .lfenergy .compas .scl .validator .xsd ;
5
5
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
-
15
6
import org .lfenergy .compas .scl .validator .exception .SclValidatorException ;
16
7
import org .lfenergy .compas .scl .validator .model .ValidationError ;
17
8
import org .lfenergy .compas .scl .validator .xsd .resourceresolver .ResourceResolver ;
22
13
import org .xml .sax .SAXException ;
23
14
import org .xml .sax .SAXParseException ;
24
15
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
+
25
25
import static org .lfenergy .compas .scl .validator .exception .SclValidatorErrorCode .LOADING_XSD_FILE_ERROR_CODE ;
26
26
27
27
public class XSDValidator {
28
28
private static final Logger LOGGER = LoggerFactory .getLogger (XSDValidator .class );
29
29
30
30
private final Validator validator ;
31
-
32
- private final List <ValidationError > errorList ;
33
31
private final String sclData ;
34
32
35
33
public XSDValidator (List <ValidationError > errorList , String sclData ) {
36
- this .errorList = errorList ;
37
34
this .sclData = sclData ;
38
35
39
36
var info = new SclInfo (sclData );
@@ -45,63 +42,63 @@ public XSDValidator(List<ValidationError> errorList, String sclData) {
45
42
var schema = factory .newSchema (
46
43
new StreamSource (getClass ().getClassLoader ().getResourceAsStream ("xsd/SCL" + sclVersion + "/SCL.xsd" )));
47
44
validator = schema .newValidator ();
48
- }
49
- catch (SAXException exception ) {
45
+ } catch (SAXException exception ) {
50
46
throw new SclValidatorException (LOADING_XSD_FILE_ERROR_CODE , exception .getMessage ());
51
47
}
52
48
53
49
validator .setErrorHandler (new ErrorHandler () {
54
50
@ Override
55
51
public void warning (SAXParseException exception ) {
56
- var validationError = addNewValidationError ( );
57
- var validationMessage = getXsdValidationMessage ( exception );
52
+ var validationError = createValidationError ( exception );
53
+ errorList . add ( validationError );
58
54
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 ());
61
59
}
62
60
63
61
@ Override
64
62
public void error (SAXParseException exception ) {
65
- var validationError = addNewValidationError ( );
66
- var validationMessage = getXsdValidationMessage ( exception );
63
+ var validationError = createValidationError ( exception );
64
+ errorList . add ( validationError );
67
65
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 ());
70
70
}
71
71
72
72
@ Override
73
73
public void fatalError (SAXParseException exception ) {
74
- var validationError = addNewValidationError ( );
75
- var validationMessage = getXsdValidationMessage ( exception );
74
+ var validationError = createValidationError ( exception );
75
+ errorList . add ( validationError );
76
76
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 ());
80
81
}
81
- } );
82
+ });
82
83
}
83
84
84
85
public void validate () {
85
86
try {
86
87
SAXSource source = new SAXSource (new InputSource (new StringReader (sclData )));
87
88
validator .validate (source );
88
- }
89
- catch (IOException exception ) {
89
+ } catch (IOException exception ) {
90
90
LOGGER .error ("[XSD validation] IOException: {}" , exception .getMessage ());
91
- }
92
- catch (SAXException exception ) {
91
+ } catch (SAXException exception ) {
93
92
LOGGER .error ("[XSD validation] SAXException: {}" , exception .getMessage ());
94
93
}
95
94
}
96
95
97
- private ValidationError addNewValidationError ( ) {
96
+ private ValidationError createValidationError ( SAXParseException exception ) {
98
97
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 ());
100
102
return validationError ;
101
103
}
102
-
103
- private String getXsdValidationMessage (SAXParseException exception ) {
104
- return "[XSD validation] (line: " + exception .getLineNumber () + ", column: "
105
- + exception .getColumnNumber () + "): " + exception .getMessage ();
106
- }
107
104
}
0 commit comments