Skip to content

Commit 9560ff9

Browse files
committed
Fixed XPathParser so it works when disconnected from the Internet (need to set entity resolver before parsing)
1 parent 74a6976 commit 9560ff9

File tree

1 file changed

+26
-14
lines changed

1 file changed

+26
-14
lines changed

src/main/java/org/apache/ibatis/parsing/XPathParser.java

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -27,51 +27,63 @@ public class XPathParser {
2727
private XPath xpath;
2828

2929
public XPathParser(String xml) {
30-
commonConstructor(createDocument(new StringReader(xml)), false, null, null);
30+
commonConstructor(false, null, null);
31+
this.document = createDocument(new StringReader(xml));
3132
}
3233

3334
public XPathParser(Reader reader) {
34-
commonConstructor(createDocument(reader), false, null, null);
35+
commonConstructor(false, null, null);
36+
this.document = createDocument(reader);
3537
}
3638

3739
public XPathParser(Document document) {
38-
commonConstructor(document, false, null, null);
40+
commonConstructor(false, null, null);
41+
this.document = document;
3942
}
4043

4144
public XPathParser(String xml, boolean validation) {
42-
commonConstructor(createDocument(new StringReader(xml)), validation, null, null);
45+
commonConstructor(validation, null, null);
46+
this.document = createDocument(new StringReader(xml));
4347
}
4448

4549
public XPathParser(Reader reader, boolean validation) {
46-
commonConstructor(createDocument(reader), validation, null, null);
50+
commonConstructor(validation, null, null);
51+
this.document = createDocument(reader);
4752
}
4853

4954
public XPathParser(Document document, boolean validation) {
50-
commonConstructor(document, validation, null, null);
55+
commonConstructor(validation, null, null);
56+
this.document = document;
5157
}
5258

5359
public XPathParser(String xml, boolean validation, Properties variables) {
54-
commonConstructor(createDocument(new StringReader(xml)), validation, variables, null);
60+
commonConstructor(validation, variables, null);
61+
this.document = createDocument(new StringReader(xml));
5562
}
5663

5764
public XPathParser(Reader reader, boolean validation, Properties variables) {
58-
commonConstructor(createDocument(reader), validation, variables, null);
65+
commonConstructor(validation, variables, null);
66+
this.document = createDocument(reader);
5967
}
6068

6169
public XPathParser(Document document, boolean validation, Properties variables) {
62-
commonConstructor(document, validation, variables, null);
70+
commonConstructor(validation, variables, null);
71+
this.document = document;
6372
}
6473

6574
public XPathParser(String xml, boolean validation, Properties variables, EntityResolver entityResolver) {
66-
commonConstructor(createDocument(new StringReader(xml)), validation, variables, entityResolver);
75+
commonConstructor(validation, variables, entityResolver);
76+
this.document = createDocument(new StringReader(xml));
6777
}
6878

6979
public XPathParser(Reader reader, boolean validation, Properties variables, EntityResolver entityResolver) {
70-
commonConstructor(createDocument(reader), validation, variables, entityResolver);
80+
commonConstructor(validation, variables, entityResolver);
81+
this.document = createDocument(reader);
7182
}
7283

7384
public XPathParser(Document document, boolean validation, Properties variables, EntityResolver entityResolver) {
74-
commonConstructor(document, validation, variables, entityResolver);
85+
commonConstructor(validation, variables, entityResolver);
86+
this.document = document;
7587
}
7688

7789
public void setVariables(Properties variables) {
@@ -170,6 +182,7 @@ private Object evaluate(String expression, Object root, QName returnType) {
170182
}
171183

172184
private Document createDocument(Reader reader) {
185+
// important: this must only be called AFTER common constructor
173186
try {
174187
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
175188
factory.setValidating(validation);
@@ -200,11 +213,10 @@ public void warning(SAXParseException exception) throws SAXException {
200213
}
201214
}
202215

203-
private void commonConstructor(Document document, boolean validation, Properties variables, EntityResolver entityResolver) {
216+
private void commonConstructor(boolean validation, Properties variables, EntityResolver entityResolver) {
204217
this.validation = validation;
205218
this.entityResolver = entityResolver;
206219
this.variables = variables;
207-
this.document = document;
208220
XPathFactory factory = XPathFactory.newInstance();
209221
this.xpath = factory.newXPath();
210222
}

0 commit comments

Comments
 (0)