Skip to content

Commit 084c6f6

Browse files
committed
Update XMLEncoder.
1 parent d0c152b commit 084c6f6

File tree

4 files changed

+39
-133
lines changed

4 files changed

+39
-133
lines changed

httprpc/src/main/java/org/httprpc/io/XMLDecoder.java

Lines changed: 0 additions & 62 deletions
This file was deleted.

httprpc/src/main/java/org/httprpc/io/XMLEncoder.java

Lines changed: 38 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ public void write(Iterable<? extends Map<String, ?>> values, Writer writer) thro
8484
streamWriter.writeStartDocument();
8585
streamWriter.writeStartElement(rootElementName);
8686

87-
writeValues(values, streamWriter);
87+
writeSequence(values, streamWriter);
8888

8989
streamWriter.writeEndElement();
9090
streamWriter.writeEndDocument();
@@ -95,42 +95,55 @@ public void write(Iterable<? extends Map<String, ?>> values, Writer writer) thro
9595
writer.flush();
9696
}
9797

98-
@SuppressWarnings("unchecked")
99-
private void writeValues(Iterable<? extends Map<String, ?>> values, XMLStreamWriter streamWriter) throws XMLStreamException {
98+
private void writeSequence(Iterable<? extends Map<String, ?>> values, XMLStreamWriter streamWriter) throws XMLStreamException {
10099
for (Map<String, ?> map : values) {
101100
streamWriter.writeStartElement("item");
102101

103-
LinkedHashMap<String, Iterable<?>> collections = new LinkedHashMap<>();
104-
105-
for (Map.Entry<String, ?> entry : map.entrySet()) {
106-
String key = entry.getKey();
102+
writeMap(map, streamWriter);
107103

108-
if (key == null) {
109-
continue;
110-
}
104+
streamWriter.writeEndElement();
105+
}
106+
}
111107

112-
Object value = entry.getValue();
108+
@SuppressWarnings("unchecked")
109+
private void writeMap(Map<String, ?> map, XMLStreamWriter streamWriter) throws XMLStreamException {
110+
LinkedHashMap<String, Iterable<?>> sequences = new LinkedHashMap<>();
111+
LinkedHashMap<String, Map<?, ?>> maps = new LinkedHashMap<>();
113112

114-
if (value == null) {
115-
continue;
116-
}
113+
for (Map.Entry<String, ?> entry : map.entrySet()) {
114+
String key = entry.getKey();
117115

118-
if (value instanceof Iterable<?>) {
119-
collections.put(key, (Iterable<? extends Map<String, ?>>)value);
120-
} else if (value instanceof Map<?, ?>) {
121-
// TODO
122-
} else {
123-
encode(key, value, streamWriter);
124-
}
116+
if (key == null) {
117+
continue;
125118
}
126119

127-
for (Map.Entry<String, Iterable<?>> entry : collections.entrySet()) {
128-
streamWriter.writeStartElement(entry.getKey());
120+
Object value = entry.getValue();
129121

130-
writeValues((Iterable<? extends Map<String, ?>>)entry.getValue(), streamWriter);
122+
if (value == null) {
123+
continue;
124+
}
131125

132-
streamWriter.writeEndElement();
126+
if (value instanceof Iterable<?>) {
127+
sequences.put(key, (Iterable<? extends Map<String, ?>>)value);
128+
} else if (value instanceof Map<?, ?>) {
129+
maps.put(key, (Map<?, ?>)value);
130+
} else {
131+
encode(key, value, streamWriter);
133132
}
133+
}
134+
135+
for (Map.Entry<String, Iterable<?>> entry : sequences.entrySet()) {
136+
streamWriter.writeStartElement(entry.getKey());
137+
138+
writeSequence((Iterable<? extends Map<String, ?>>)entry.getValue(), streamWriter);
139+
140+
streamWriter.writeEndElement();
141+
}
142+
143+
for (Map.Entry<String, Map<?, ?>> entry : maps.entrySet()) {
144+
streamWriter.writeStartElement(entry.getKey());
145+
146+
writeMap((Map<String, ?>)entry.getValue(), streamWriter);
134147

135148
streamWriter.writeEndElement();
136149
}

httprpc/src/test/java/org/httprpc/io/XMLDecoderTest.java

Lines changed: 0 additions & 46 deletions
This file was deleted.

httprpc/src/test/java/org/httprpc/io/XMLEncoderTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ public void testWrite() throws IOException {
3232
+ "<test>"
3333
+ "<item a=\"ABC\" b=\"1\" c=\"2.345\" f=\"0\" g=\"3\">"
3434
+ "<d><item e=\"true\"></item><item e=\"false\"></item></d>"
35+
+ "<e><f g=\"XYZ\"></f></e>"
3536
+ "</item>"
3637
+ "<item a=\"DÉF\" b=\"2\" c=\"4.5678\"></item>"
3738
+ "</test>";

0 commit comments

Comments
 (0)