Skip to content

Commit c53bc27

Browse files
change default property name for xml text from empty string to <xml:text>
1 parent d6949af commit c53bc27

12 files changed

+26
-21
lines changed

src/main/java/tools/jackson/dataformat/xml/JacksonXmlAnnotationIntrospector.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import tools.jackson.databind.cfg.MapperConfig;
99
import tools.jackson.databind.introspect.*;
1010
import tools.jackson.dataformat.xml.annotation.*;
11+
import tools.jackson.dataformat.xml.deser.FromXmlParser;
1112

1213
/**
1314
* Extension of {@link JacksonAnnotationIntrospector} that is needed to support
@@ -208,6 +209,10 @@ public PropertyName findNameForDeserialization(MapperConfig<?> config, Annotated
208209
PropertyName pn = PropertyName.merge(_findXmlName(a),
209210
super.findNameForDeserialization(config, a));
210211
if (pn == null) {
212+
if(_hasAnnotation(a, JacksonXmlText.class)){
213+
return PropertyName.construct(FromXmlParser.DEFAULT_TEXT_PROPERTY);
214+
}
215+
211216
if (_hasOneOf(a, ANNOTATIONS_TO_INFER_XML_PROP)) {
212217
return PropertyName.USE_DEFAULT;
213218
}

src/main/java/tools/jackson/dataformat/xml/XmlMapper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ public Builder(XmlFactory f) {
6767
// String into `null` (where it otherwise is an error) is very useful.
6868
enable(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT);
6969
_defaultUseWrapper = JacksonXmlAnnotationIntrospector.DEFAULT_USE_WRAPPER;
70-
_nameForTextElement = FromXmlParser.DEFAULT_UNNAMED_TEXT_PROPERTY;
70+
_nameForTextElement = FromXmlParser.DEFAULT_TEXT_PROPERTY;
7171

7272
// as well as AnnotationIntrospector: note, however, that "use wrapper" may well
7373
// change later on

src/main/java/tools/jackson/dataformat/xml/deser/FromXmlParser.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,10 @@ public class FromXmlParser
3535
implements ElementWrappable
3636
{
3737
/**
38-
* The default name placeholder for XML text segments is empty
39-
* String ("").
38+
* The default name placeholder for XML text segments is &lt;xml:text&gt;
39+
* @since 3.0.0 Is now &lt;xml:text&gt; - was empty String ("") before.
4040
*/
41-
public final static String DEFAULT_UNNAMED_TEXT_PROPERTY = "";
41+
public final static String DEFAULT_TEXT_PROPERTY = "<xml:text>";
4242

4343
/**
4444
* XML format has some peculiarities, indicated via capability
@@ -61,7 +61,7 @@ public class FromXmlParser
6161
* may be changed for inter-operability reasons: JAXB, for example, uses
6262
* "value" as name.
6363
*/
64-
protected String _cfgNameForTextElement = DEFAULT_UNNAMED_TEXT_PROPERTY;
64+
protected String _cfgNameForTextElement = DEFAULT_TEXT_PROPERTY;
6565

6666
/*
6767
/**********************************************************************

src/main/java/tools/jackson/dataformat/xml/deser/XmlDeserializationContext.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ public String extractScalarFromObject(JsonParser p, ValueDeserializer<?> deser,
6868
final String propName = p.currentName();
6969
JsonToken t = p.nextToken();
7070
if (t == JsonToken.VALUE_STRING) {
71-
if (propName.equals("")) {
71+
if (FromXmlParser.DEFAULT_TEXT_PROPERTY.equals(propName)) {
7272
text = p.getString();
7373
}
7474
} else {

src/test/java/tools/jackson/dataformat/xml/deser/MapDeserializationTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public void testMapWithAttr() throws Exception
4141
assertEquals(1, map.size());
4242
Map<String,Object> inner = new LinkedHashMap<>();
4343
inner.put("lang", "en");
44-
inner.put("", "John Smith");
44+
inner.put(FromXmlParser.DEFAULT_TEXT_PROPERTY, "John Smith");
4545
assertEquals(Collections.singletonMap("person", inner), map);
4646
}
4747
}

src/test/java/tools/jackson/dataformat/xml/deser/UntypedObjectDeserTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ public void testMixedContent() throws Exception
7777
final String XML = "<root>first<a>123</a>second<b>abc</b>last</root>";
7878
final JsonNode fromXml = XML_MAPPER.valueToTree(XML_MAPPER.readValue(XML, Object.class));
7979
final ObjectNode exp = XML_MAPPER.createObjectNode();
80-
exp.putArray("")
80+
exp.putArray(FromXmlParser.DEFAULT_TEXT_PROPERTY)
8181
.add("first")
8282
.add("second")
8383
.add("last");

src/test/java/tools/jackson/dataformat/xml/node/JsonNodeBasicDeserTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import tools.jackson.databind.node.JsonNodeType;
88
import tools.jackson.databind.node.ObjectNode;
99
import tools.jackson.dataformat.xml.XmlTestUtil;
10+
import tools.jackson.dataformat.xml.deser.FromXmlParser;
1011

1112
import static org.junit.jupiter.api.Assertions.*;
1213

@@ -43,7 +44,7 @@ public void testMixedContent() throws Exception
4344
{
4445
JsonNode fromXml = XML_MAPPER.readTree("<root>first<a>123</a>second<b>abc</b>last</root>");
4546
final ObjectNode exp = XML_MAPPER.createObjectNode();
46-
exp.putArray("")
47+
exp.putArray(FromXmlParser.DEFAULT_TEXT_PROPERTY)
4748
.add("first")
4849
.add("second")
4950
.add("last");

src/test/java/tools/jackson/dataformat/xml/node/JsonNodeMixedContent403Test.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import tools.jackson.databind.ObjectMapper;
77
import tools.jackson.databind.json.JsonMapper;
88
import tools.jackson.dataformat.xml.XmlTestUtil;
9+
import tools.jackson.dataformat.xml.deser.FromXmlParser;
910

1011
import static org.junit.jupiter.api.Assertions.assertEquals;
1112

@@ -19,23 +20,23 @@ public class JsonNodeMixedContent403Test extends XmlTestUtil
1920
public void testMixedContentBefore() throws Exception
2021
{
2122
// First, before elements:
22-
assertEquals(JSON_MAPPER.readTree(a2q("{'':'before','a':'1','b':'2'}")),
23+
assertEquals(JSON_MAPPER.readTree(a2q(String.format("{'%s':'before','a':'1','b':'2'}", FromXmlParser.DEFAULT_TEXT_PROPERTY))),
2324
XML_MAPPER.readTree("<root>before<a>1</a><b>2</b></root>"));
2425
}
2526

2627
@Test
2728
public void testMixedContentBetween() throws Exception
2829
{
2930
// Second, between
30-
assertEquals(JSON_MAPPER.readTree(a2q("{'a':'1','':'between','b':'2'}")),
31+
assertEquals(JSON_MAPPER.readTree(a2q(String.format("{'a':'1','%s':'between','b':'2'}", FromXmlParser.DEFAULT_TEXT_PROPERTY))),
3132
XML_MAPPER.readTree("<root><a>1</a>between<b>2</b></root>"));
3233
}
3334

3435
@Test
3536
public void testMixedContentAfter() throws Exception
3637
{
3738
// and then after
38-
assertEquals(JSON_MAPPER.readTree(a2q("{'a':'1','b':'2','':'after'}")),
39+
assertEquals(JSON_MAPPER.readTree(a2q(String.format("{'a':'1','b':'2','%s':'after'}", FromXmlParser.DEFAULT_TEXT_PROPERTY))),
3940
XML_MAPPER.readTree("<root><a>1</a><b>2</b>after</root>"));
4041
}
4142

@@ -44,7 +45,7 @@ public void testMultipleMixedContent() throws Exception
4445
{
4546
// and then after
4647
assertEquals(JSON_MAPPER.readTree(
47-
a2q("{'':['first','second','third'],'a':'1','b':'2'}")),
48+
a2q(String.format("{'%s':['first','second','third'],'a':'1','b':'2'}", FromXmlParser.DEFAULT_TEXT_PROPERTY))),
4849
XML_MAPPER.readTree("<root>first<a>1</a>second<b>2</b>third</root>"));
4950
}
5051

@@ -57,7 +58,7 @@ public void testMixed226() throws Exception
5758
+" mixed2</a>\n"
5859
+"</root>";
5960
JsonNode fromJson = JSON_MAPPER.readTree(
60-
a2q("{'a':{'':['mixed1 ',' mixed2'],'b':'leaf'}}"));
61+
a2q(String.format("{'a':{'%s':['mixed1 ',' mixed2'],'b':'leaf'}}", FromXmlParser.DEFAULT_TEXT_PROPERTY)));
6162
assertEquals(fromJson, XML_MAPPER.readTree(XML));
6263
}
6364
}

src/test/java/tools/jackson/dataformat/xml/stream/XmlParser442Test.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public void testMixedContentBeforeElement442() throws Exception
4444
// Here's what we are missing:
4545
assertToken(JsonToken.START_OBJECT, xp.nextToken());
4646
assertToken(JsonToken.PROPERTY_NAME, xp.nextToken());
47-
assertEquals("", xp.currentName());
47+
assertEquals(FromXmlParser.DEFAULT_TEXT_PROPERTY, xp.currentName());
4848

4949
assertToken(JsonToken.VALUE_STRING, xp.nextToken());
5050
assertEquals("text", xp.getString().trim());

src/test/java/tools/jackson/dataformat/xml/stream/XmlParserTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ public void testRootScalar() throws Exception
9999
try (JsonParser p = _xmlMapper.createParser(XML)) {
100100
assertToken(JsonToken.START_OBJECT, p.nextToken());
101101
assertToken(JsonToken.PROPERTY_NAME, p.nextToken());
102-
assertEquals("", p.currentName());
102+
assertEquals(FromXmlParser.DEFAULT_TEXT_PROPERTY, p.currentName());
103103
assertToken(JsonToken.VALUE_STRING, p.nextToken());
104104
assertEquals("value", p.getString());
105105
assertToken(JsonToken.END_OBJECT, p.nextToken());
@@ -118,7 +118,7 @@ public void testRootMixed() throws Exception
118118
assertToken(JsonToken.START_OBJECT, p.nextToken());
119119

120120
assertToken(JsonToken.PROPERTY_NAME, p.nextToken());
121-
assertEquals("", p.currentName());
121+
assertEquals(FromXmlParser.DEFAULT_TEXT_PROPERTY, p.currentName());
122122
assertToken(JsonToken.VALUE_STRING, p.nextToken());
123123
assertEquals("value", p.getString());
124124

@@ -343,7 +343,7 @@ public void testXmlAttributes() throws Exception
343343
@Test
344344
public void testMixedContent() throws Exception
345345
{
346-
String exp = a2q("{'':'first','a':'123','':'second','b':'456','':'last'}");
346+
String exp = a2q(String.format("{'%1$s':'first','a':'123','%1$s':'second','b':'456','%1$s':'last'}", FromXmlParser.DEFAULT_TEXT_PROPERTY));
347347
String result = _readXmlWriteJson("<root>first<a>123</a>second<b>456</b>last</root>");
348348

349349
//System.err.println("result = \n"+result);
@@ -373,7 +373,7 @@ public void testInferredNumbers() throws Exception
373373
assertEquals(42, xp.getIntValue());
374374

375375
assertToken(JsonToken.PROPERTY_NAME, xp.nextToken()); // implicit for text
376-
assertEquals("", xp.currentName());
376+
assertEquals(FromXmlParser.DEFAULT_TEXT_PROPERTY, xp.currentName());
377377

378378
assertToken(JsonToken.VALUE_STRING, xp.nextToken());
379379
assertTrue(xp.isExpectedNumberIntToken());

src/test/java/tools/jackson/dataformat/xml/tofix/XmlTextViaCreator306Test.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,6 @@ public void testIssue306NoCtor() throws Exception
116116
}
117117

118118
// [dataformat-xml#423]
119-
@JacksonTestFailureExpected
120119
@Test
121120
public void testXmlTextViaCtor423() throws Exception
122121
{

src/test/java/tools/jackson/dataformat/xml/tofix/records/XmlRecordDeser734Test.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ record Amount(@JacksonXmlText String value,
1818
private final String XML =
1919
a2q("<Amt Ccy='EUR'>1</Amt>");
2020

21-
@JacksonTestFailureExpected
2221
@Test
2322
public void testDeser() throws Exception {
2423
XmlMapper mapper = new XmlMapper();

0 commit comments

Comments
 (0)