Skip to content

Commit ba450bc

Browse files
authored
fix: one xml parse error causes all subsequent parses to fail as well (#16)
1 parent e8c1677 commit ba450bc

File tree

3 files changed

+23
-14
lines changed

3 files changed

+23
-14
lines changed

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
currentVersion=0.1.11
1+
currentVersion=0.1.12
22
mainClassName=io.github.easybill.xrviz.App

src/main/java/io/github/easybill/xrviz/XslTransformer.java

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -32,23 +32,20 @@ public class XslTransformer {
3232
public static final String UBL_I_VALIDATION_STRING = "Invoice";
3333
public static final String UBL_C_VALIDATION_STRING = "CreditNote";
3434
public static final Pattern REGEX = Pattern.compile("[<:](CrossIndustryInvoice|Invoice|CreditNote)");
35-
private static final XMLReader xmlReader;
35+
private static final SAXParserFactory saxParserFactory;
3636

3737
static {
3838
try {
39-
SAXParserFactory factory = SAXParserFactory.newInstance();
40-
SAXParser saxParser = factory.newSAXParser();
41-
xmlReader = saxParser.getXMLReader();
42-
xmlReader.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
43-
xmlReader.setFeature("http://xml.org/sax/features/external-general-entities", false);
44-
xmlReader.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
39+
saxParserFactory = SAXParserFactory.newInstance();
40+
saxParserFactory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
41+
saxParserFactory.setFeature("http://xml.org/sax/features/external-general-entities", false);
42+
saxParserFactory.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
4543
} catch (Exception e) {
46-
logger.log(Level.SEVERE, "Error initializing XMLReader", e);
47-
throw new RuntimeException(e);
44+
logger.log(Level.SEVERE, "Error initializing SAXParserFactory", e);
45+
throw new ExceptionInInitializerError(e);
4846
}
4947
}
5048

51-
5249
enum DocumentType {
5350
CII("cii-xr.xsl"),
5451
UBL_I("ubl-invoice-xr.xsl"),
@@ -105,10 +102,22 @@ public static void validateFiles() {
105102
}
106103
}
107104

105+
private static XMLReader newXmlReader() {
106+
try {
107+
SAXParser saxParser = saxParserFactory.newSAXParser();
108+
return saxParser.getXMLReader();
109+
} catch (Exception e) {
110+
// should not happen due to setFeature calls on saxParserFactory
111+
logger.log(Level.SEVERE, "Error initializing XMLReader", e);
112+
throw new RuntimeException(e);
113+
}
114+
}
115+
108116
private static DOMSource transformXmlToXr(String inputXml, DocumentType type) throws TransformerException {
109117
TransformerFactory factory = TransformerFactory.newInstance();
110118
StreamSource source = new StreamSource("data/xsl/" + type.getXslName());
111119
Transformer transformer = factory.newTransformer(source);
120+
XMLReader xmlReader = newXmlReader();
112121
SAXSource saxSource = new SAXSource(xmlReader, new InputSource(new StringReader(inputXml)));
113122
DOMResult domResult = new DOMResult();
114123
transformer.transform(saxSource, domResult);

version-badge.svg

Lines changed: 3 additions & 3 deletions
Loading

0 commit comments

Comments
 (0)