Skip to content

Commit ae8179a

Browse files
committed
Support the encoding attribute
1 parent 670dd29 commit ae8179a

File tree

7 files changed

+31
-5
lines changed

7 files changed

+31
-5
lines changed

src/main/java/com/nwalsh/sinclude/DefaultDocumentResolver.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,11 +45,11 @@ public XdmNode resolveXml(XdmNode base, String uri, String accept, String accept
4545
}
4646

4747
@Override
48-
public XdmNode resolveText(XdmNode base, String uri, String accept, String acceptLanguage) {
48+
public XdmNode resolveText(XdmNode base, String uri, String encoding, String accept, String acceptLanguage) {
4949
Processor processor = base.getProcessor();
5050
UnparsedTextURIResolver resolver = processor.getUnderlyingConfiguration().getUnparsedTextURIResolver();
5151
try {
52-
Reader reader = resolver.resolve(base.getBaseURI().resolve(uri), "utf-8", processor.getUnderlyingConfiguration());
52+
Reader reader = resolver.resolve(base.getBaseURI().resolve(uri), encoding, processor.getUnderlyingConfiguration());
5353
BufferedReader breader = new BufferedReader(reader);
5454
StringBuilder text = new StringBuilder();
5555
String line = breader.readLine();

src/main/java/com/nwalsh/sinclude/DocumentResolver.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,5 @@
66

77
public interface DocumentResolver {
88
public XdmNode resolveXml(XdmNode base, String uri, String accept, String acceptLanguage);
9-
public XdmNode resolveText(XdmNode base, String uri, String accept, String acceptLanguage);
9+
public XdmNode resolveText(XdmNode base, String uri, String encoding, String accept, String acceptLanguage);
1010
}

src/main/java/com/nwalsh/sinclude/XInclude.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,7 @@ public XdmNode process(XdmNode node) throws XPathException {
213213
String xptr = node.getAttributeValue(_xpointer);
214214
String fragid = node.getAttributeValue(_fragid);
215215
String setId = node.getAttributeValue(_set_xml_id);
216+
String encoding = node.getAttributeValue(_encoding);
216217
String accept = node.getAttributeValue(_accept);
217218
String accept_lang = node.getAttributeValue(_accept_language);
218219
String parseAttr = node.getAttributeValue(_parse);
@@ -222,6 +223,10 @@ public XdmNode process(XdmNode node) throws XPathException {
222223
href = "";
223224
}
224225

226+
if (encoding == null) {
227+
encoding = "UTF-8";
228+
}
229+
225230
if (accept != null && accept.matches(".*[^\u0020-\u007e].*")) {
226231
throw new IllegalArgumentException("Invalid characters in accept value");
227232
}
@@ -324,7 +329,7 @@ public XdmNode process(XdmNode node) throws XPathException {
324329
uriStack.push(next);
325330

326331
if (parse == ParseType.TEXTPARSE) {
327-
doc = resolver.resolveText(node, href, accept, accept_lang);
332+
doc = resolver.resolveText(node, href, encoding, accept, accept_lang);
328333
} else {
329334
doc = resolver.resolveXml(node, href, accept, accept_lang);
330335
}

src/test/java/com/nwalsh/sinclude/FakeDocumentResolver.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -299,7 +299,7 @@ public XdmNode resolveXml(XdmNode base, String uri, String accept, String accept
299299
}
300300

301301
@Override
302-
public XdmNode resolveText(XdmNode base, String uri, String accept, String acceptLanguage) {
302+
public XdmNode resolveText(XdmNode base, String uri, String encoding, String accept, String acceptLanguage) {
303303
Logger logger = base.getProcessor().getUnderlyingConfiguration().getLogger();
304304
logger.info("Resolving text XInclude: " + uri + " (" + base.getBaseURI().resolve(uri).toASCIIString() + ")");
305305
if (textMap.containsKey(uri)) {

src/test/java/com/nwalsh/sinclude/XIncludeTest.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
import javax.xml.transform.sax.SAXSource;
1515
import java.io.ByteArrayInputStream;
16+
import java.io.File;
1617
import java.nio.charset.StandardCharsets;
1718

1819
public class XIncludeTest extends TestCase {
@@ -325,4 +326,17 @@ public void testTextGhLineRange() {
325326
compareDocs("ghlinerange.xml");
326327
}
327328

329+
public void testEncoding() {
330+
XInclude include = new XInclude();
331+
332+
try {
333+
DocumentBuilder builder = processor.newDocumentBuilder();
334+
XdmNode doc = builder.build(new File("src/test/resources/iso-8859-1.xml"));
335+
XdmNode resolved = include.expandXIncludes(doc);
336+
assertNotNull(resolved);
337+
} catch (Exception e) {
338+
fail();
339+
}
340+
}
341+
328342
}

src/test/resources/iso-8859-1.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
This is a simple text file in ISO-8859-1: � � �

src/test/resources/iso-8859-1.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<document>
2+
<xi:include href="iso-8859-1.txt"
3+
parse="text"
4+
encoding="iso-8859-1"
5+
xmlns:xi="http://www.w3.org/2001/XInclude"/>
6+
</document>

0 commit comments

Comments
 (0)