Skip to content

Commit a02a816

Browse files
committed
Repair and prepare for further improvements.
Change visibility of two methods we need in some other projects. Also set validation of documents to false because it is still very buggy.
1 parent efc61e0 commit a02a816

4 files changed

Lines changed: 41 additions & 30 deletions

File tree

src/main/java/com/formulasearchengine/mathmlquerygenerator/BasicXQueryGenerator.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@ public static BasicXQueryGenerator getDefaultGenerator() {
3535
.addFooter("}\n</result>");
3636
}
3737

38+
public BasicXQueryGenerator() {
39+
}
40+
3841
@Override
3942
public String generateQuery(Document document) {
4043
if (document == null) {

src/main/java/com/formulasearchengine/mathmlquerygenerator/XQueryGenerator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ protected String getDefaultString() {
9090
}
9191

9292

93-
Node getMainElement() {
93+
public Node getMainElement() {
9494
return mainElement;
9595
}
9696

src/main/java/com/formulasearchengine/mathmltools/mml/elements/MathDoc.java

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,14 @@
1111
import com.formulasearchengine.mathmltools.xmlhelper.PartialLocalEntityResolver;
1212
import com.formulasearchengine.mathmltools.xmlhelper.XMLHelper;
1313
import com.formulasearchengine.mathmltools.xmlhelper.XmlDocumentReader;
14+
1415
import javax.xml.parsers.DocumentBuilder;
1516
import javax.xml.parsers.ParserConfigurationException;
1617
import javax.xml.transform.Source;
1718
import javax.xml.transform.TransformerException;
1819
import javax.xml.transform.stream.StreamSource;
1920
import javax.xml.validation.SchemaFactory;
21+
2022
import org.apache.commons.lang3.NotImplementedException;
2123
import org.apache.logging.log4j.LogManager;
2224
import org.apache.logging.log4j.Logger;
@@ -35,9 +37,11 @@
3537
import org.xmlunit.validation.Validator;
3638

3739
public class MathDoc {
38-
private static final Logger log = LogManager.getLogger("Math");
39-
private static final String DOCTYPE = "<!DOCTYPE math PUBLIC \"-//W3C//DTD MATHML 3.0 Transitional//EN\" \n"
40-
+ " \"http://www.w3.org/Math/DTD/mathml3/mathml3.dtd\">\n";
40+
private static final Logger log = LogManager.getLogger(MathDoc.class.getName());
41+
private static final String DOCTYPE =
42+
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n"
43+
+ "<!DOCTYPE math PUBLIC \"-//W3C//DTD MATHML 3.0 Transitional//EN\" \n"
44+
+ " \"http://www.w3.org/Math/DTD/mathml3/mathml3.dtd\">\n";
4145
private static final String MATHML3_XSD = "https://www.w3.org/Math/XMLSchema/mathml3/mathml3.xsd";
4246
private static final String APPLICATION_X_TEX = "application/x-tex";
4347
private static Validator v;
@@ -58,13 +62,15 @@ public MathDoc(String inputXMLString) throws ParserConfigurationException, SAXEx
5862
try {
5963
buildDom(inputXMLString, documentBuilder);
6064
} catch (Exception e) {
61-
log.warn("Error parsing input \n{}\n. Adding MathML3 Document headers.", inputXMLString);
65+
log.warn("Exception during parsing process. Adding MathML3 Document headers and try again.");
6266
inputXMLString = tryFixHeader(inputXMLString);
6367
try {
6468
buildDom(inputXMLString, documentBuilder);
6569
} catch (SAXException | IOException e1) {
66-
// Throw the exception caused by the original input, not by the corrected input.
67-
throw e;
70+
log.error(
71+
"Try to fix header but it didn't help. Still invalid document"
72+
+ System.lineSeparator()
73+
+ inputXMLString, e1);
6874
}
6975
}
7076
}

src/main/java/com/formulasearchengine/mathmltools/xmlhelper/XmlDocumentReader.java

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,5 @@
11
package com.formulasearchengine.mathmltools.xmlhelper;
22

3-
import static org.xmlunit.util.Convert.toInputSource;
4-
5-
import java.io.IOException;
6-
import java.io.InputStream;
7-
import java.io.StringReader;
8-
import java.nio.file.Files;
9-
import java.nio.file.Path;
10-
11-
import javax.xml.parsers.DocumentBuilder;
12-
import javax.xml.parsers.DocumentBuilderFactory;
13-
import javax.xml.parsers.ParserConfigurationException;
14-
import javax.xml.transform.Source;
153
import org.apache.logging.log4j.LogManager;
164
import org.apache.logging.log4j.Logger;
175
import org.w3c.dom.Document;
@@ -21,6 +9,18 @@
219
import org.xmlunit.builder.Input;
2210
import org.xmlunit.util.Convert;
2311

12+
import javax.xml.parsers.DocumentBuilder;
13+
import javax.xml.parsers.DocumentBuilderFactory;
14+
import javax.xml.parsers.ParserConfigurationException;
15+
import javax.xml.transform.Source;
16+
import java.io.IOException;
17+
import java.io.InputStream;
18+
import java.io.StringReader;
19+
import java.nio.file.Files;
20+
import java.nio.file.Path;
21+
22+
import static org.xmlunit.util.Convert.toInputSource;
23+
2424
/**
2525
* Helper class to format XML files to Document and Node types
2626
*/
@@ -41,15 +41,13 @@ private XmlDocumentReader() {
4141

4242
public static Document getDocumentFromXML(Path xmlF) {
4343
final Source source = Input.fromFile(xmlF.toAbsolutePath().toString()).build();
44-
final InputSource is = toInputSource(source);
44+
String orig = null;
4545
try {
46-
return getDocument(is); //getDocument(is);
47-
} catch (ParserConfigurationException | IOException | SAXException e) {
48-
LOG.warn("Cannot parse XML file with grammar: " + xmlF.toString(), e);
46+
orig = new String(Files.readAllBytes(xmlF));
47+
} catch (IOException ioe) {
48+
LOG.fatal("Cannot read xml file " + xmlF.toString());
4949
}
50-
return oldgetDocumentFromXML(xmlF);
51-
52-
50+
return getDocumentFromSource(source, orig);
5351
}
5452

5553
private static Document getDocument(InputSource inputStream) throws ParserConfigurationException, IOException, SAXException {
@@ -97,18 +95,22 @@ public static Document oldgetDocumentFromXML(Path xmlF) {
9795

9896
public static Document getDocumentFromXMLString(String xml) {
9997
Source source = Input.fromString(xml).build();
98+
return getDocumentFromSource(source, xml);
99+
}
100+
101+
private static Document getDocumentFromSource(Source source, String orig) {
100102
final InputSource is = toInputSource(source);
101103
try {
102104
return getDocument(is);
103105
} catch (ParserConfigurationException | IOException | SAXException e) {
104-
e.printStackTrace();
106+
LOG.warn("Cannot parse document directly '{}'.", e.getMessage());
105107
}
106108
try {
107109
return parse(source);
108110
} catch (ParserConfigurationException | IOException | SAXException e) {
109-
e.printStackTrace();
111+
LOG.warn("Cannot parse on second attempt '{}'.", e.getMessage());
110112
}
111-
return oldgetDocumentFromXMLString(xml);
113+
return oldgetDocumentFromXMLString(orig);
112114
}
113115

114116
private static Document parse(Source s) throws ParserConfigurationException, IOException, SAXException {
@@ -131,7 +133,7 @@ public static DocumentBuilder getDocumentBuilder() throws ParserConfigurationExc
131133

132134
private static DocumentBuilderFactory getDocumentBuilderFactory() throws ParserConfigurationException {
133135
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
134-
dbf.setValidating(true);
136+
dbf.setValidating(false);
135137
dbf.setFeature("http://xml.org/sax/features/validation", true);
136138
dbf.setFeature("http://apache.org/xml/features/nonvalidating/load-dtd-grammar", false);
137139
dbf.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);

0 commit comments

Comments
 (0)