Skip to content

Commit 8819115

Browse files
committed
Make simple XML encoder value tag name configurable.
Fixes #379.
1 parent 56c96a3 commit 8819115

File tree

2 files changed

+64
-1
lines changed

2 files changed

+64
-1
lines changed

metafacture-xml/src/main/java/org/metafacture/xml/SimpleXmlEncoder.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ public final class SimpleXmlEncoder extends DefaultStreamPipe<ObjectReceiver<Str
5555

5656
public static final String DEFAULT_ROOT_TAG = "records";
5757
public static final String DEFAULT_RECORD_TAG = "record";
58+
public static final String DEFAULT_VALUE_TAG = null;
5859

5960
private static final String NEW_LINE = "\n";
6061
private static final String INDENT = "\t";
@@ -75,6 +76,7 @@ public final class SimpleXmlEncoder extends DefaultStreamPipe<ObjectReceiver<Str
7576
private String attributeMarker = ATTRIBUTE_MARKER;
7677
private String rootTag = DEFAULT_ROOT_TAG;
7778
private String recordTag = DEFAULT_RECORD_TAG;
79+
private String valueTag = DEFAULT_VALUE_TAG;
7880
private Map<String, String> namespaces = new HashMap<String, String>();
7981
private boolean writeRootTag = true;
8082
private boolean writeXmlHeader = true;
@@ -97,6 +99,14 @@ public void setRecordTag(final String tag) {
9799
recordTag = tag;
98100
}
99101

102+
public void setValueTag(final String valueTag) {
103+
this.valueTag = valueTag;
104+
}
105+
106+
public String getValueTag() {
107+
return valueTag;
108+
}
109+
100110
public void setNamespaceFile(final String file) {
101111
final Properties properties;
102112
try {
@@ -201,7 +211,7 @@ public void endEntity() {
201211

202212
@Override
203213
public void literal(final String name, final String value) {
204-
if (name.isEmpty()) {
214+
if (name.isEmpty() || name.equals(valueTag)) {
205215
element.setText(value);
206216
}
207217
else if (name.startsWith(attributeMarker)) {

metafacture-xml/src/test/java/org/metafacture/xml/SimpleXmlEncoderTest.java

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,59 @@ public void shouldAddNamespaceWithEmptyKeyFromPropertiesFileAsDefaultNamespaceTo
179179
getResultXml());
180180
}
181181

182+
@Test
183+
public void testShouldEncodeEmptyLiteralsAsText() {
184+
simpleXmlEncoder.startRecord("");
185+
simpleXmlEncoder.literal("", VALUE);
186+
simpleXmlEncoder.endRecord();
187+
simpleXmlEncoder.closeStream();
188+
189+
assertEquals("<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
190+
"<records>" +
191+
"<record>" +
192+
"value" +
193+
"</record>" +
194+
"</records>",
195+
getResultXml());
196+
}
197+
198+
@Test
199+
public void testShouldNotEncodeLiteralsWithDifferentValueTagNameAsText() {
200+
simpleXmlEncoder.setValueTag("data");
201+
202+
simpleXmlEncoder.startRecord("");
203+
simpleXmlEncoder.literal(TAG, VALUE);
204+
simpleXmlEncoder.endRecord();
205+
simpleXmlEncoder.closeStream();
206+
207+
assertEquals("<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
208+
"<records>" +
209+
"<record>" +
210+
"<tag>value</tag>" +
211+
"</record>" +
212+
"</records>",
213+
getResultXml());
214+
}
215+
216+
@Test
217+
public void issue379_testShouldEncodeConfiguredValueLiteralsAsText() {
218+
final String name = "data";
219+
simpleXmlEncoder.setValueTag(name);
220+
221+
simpleXmlEncoder.startRecord("");
222+
simpleXmlEncoder.literal(name, VALUE);
223+
simpleXmlEncoder.endRecord();
224+
simpleXmlEncoder.closeStream();
225+
226+
assertEquals("<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
227+
"<records>" +
228+
"<record>" +
229+
"value" +
230+
"</record>" +
231+
"</records>",
232+
getResultXml());
233+
}
234+
182235
@Test
183236
public void testShouldEncodeMarkedLiteralsAsAttributes() {
184237
simpleXmlEncoder.startRecord("");

0 commit comments

Comments
 (0)