Skip to content

Commit 901d093

Browse files
committed
Update TemplateEncoder.
1 parent 33557f0 commit 901d093

File tree

5 files changed

+53
-3
lines changed

5 files changed

+53
-3
lines changed

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
subprojects {
1616
group = 'org.httprpc'
17-
version = '5.3.1'
17+
version = '5.3.2'
1818

1919
repositories {
2020
mavenCentral()

kilo-client/src/main/java/org/httprpc/kilo/io/TemplateEncoder.java

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,16 @@
1515
package org.httprpc.kilo.io;
1616

1717
import org.httprpc.kilo.beans.BeanAdapter;
18+
import org.httprpc.kilo.xml.ElementAdapter;
19+
import org.w3c.dom.Document;
1820

21+
import javax.xml.transform.TransformerException;
22+
import javax.xml.transform.dom.DOMSource;
23+
import javax.xml.transform.stream.StreamResult;
1924
import java.io.IOException;
2025
import java.io.InputStreamReader;
2126
import java.io.Reader;
27+
import java.io.StringWriter;
2228
import java.io.Writer;
2329
import java.text.NumberFormat;
2430
import java.time.Instant;
@@ -580,7 +586,21 @@ private void encode(Object root, Writer writer, Reader reader) throws IOExceptio
580586
value = modifier.apply(value, modifierArguments.get(modifierName), locale, timeZone);
581587
}
582588

583-
value = defaultModifier.apply(value, null, locale, timeZone);
589+
if (value instanceof Document document) {
590+
var transformer = ElementAdapter.newTransformer();
591+
592+
var documentWriter = new StringWriter();
593+
594+
try {
595+
transformer.transform(new DOMSource(document), new StreamResult(documentWriter));
596+
} catch (TransformerException exception) {
597+
throw new RuntimeException(exception);
598+
}
599+
600+
value = documentWriter;
601+
} else {
602+
value = defaultModifier.apply(value, null, locale, timeZone);
603+
}
584604

585605
writer.append(value.toString());
586606
}

kilo-client/src/test/java/org/httprpc/kilo/io/TemplateEncoderTest.java

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,14 @@
1414

1515
package org.httprpc.kilo.io;
1616

17+
import org.httprpc.kilo.xml.ElementAdapter;
1718
import org.junit.jupiter.api.Test;
19+
import org.w3c.dom.Document;
20+
import org.xml.sax.InputSource;
21+
import org.xml.sax.SAXException;
1822

1923
import java.io.IOException;
24+
import java.io.StringReader;
2025
import java.io.StringWriter;
2126
import java.time.LocalDate;
2227
import java.time.LocalDateTime;
@@ -476,7 +481,7 @@ public void testDateFormatModifiers() throws IOException {
476481

477482
@Test
478483
public void testDefaultContentType() throws IOException {
479-
var templateEncoder = new TemplateEncoder(getClass(), "xml.txt");
484+
var templateEncoder = new TemplateEncoder(getClass(), "default-content-type.txt");
480485

481486
templateEncoder.setResourceBundle(ResourceBundle.getBundle(getClass().getPackageName() + ".test"));
482487

@@ -547,6 +552,30 @@ public void testEmptyRecursion() throws IOException {
547552
assertEquals("[]", writer.toString());
548553
}
549554

555+
@Test
556+
public void testEmbeddedXML() throws IOException {
557+
var xml = "<abc>123</abc>";
558+
559+
var documentBuilder = ElementAdapter.newDocumentBuilder();
560+
561+
Document document;
562+
try {
563+
document = documentBuilder.parse(new InputSource(new StringReader(xml)));
564+
} catch (SAXException | IOException exception) {
565+
throw new RuntimeException(exception);
566+
}
567+
568+
var templateEncoder = new TemplateEncoder(getClass(), "embedded-xml.txt");
569+
570+
var writer = new StringWriter();
571+
572+
templateEncoder.write(mapOf(
573+
entry("xml", document)
574+
), writer);
575+
576+
assertEquals(xml, writer.toString());
577+
}
578+
550579
@Test
551580
public void testInvalidPath1() {
552581
var templateEncoder = new TemplateEncoder(getClass(), "invalid-path.txt");

kilo-client/src/test/resources/org/httprpc/kilo/io/xml.txt renamed to kilo-client/src/test/resources/org/httprpc/kilo/io/default-content-type.txt

File renamed without changes.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{{xml}}

0 commit comments

Comments
 (0)