Skip to content

Commit 56d3f0c

Browse files
committed
Add XML-specific read capabilities support, test
1 parent ee5ce93 commit 56d3f0c

File tree

2 files changed

+48
-2
lines changed

2 files changed

+48
-2
lines changed

src/main/java/com/fasterxml/jackson/dataformat/xml/deser/FromXmlParser.java

+30-2
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
import com.fasterxml.jackson.core.base.ParserMinimalBase;
1515
import com.fasterxml.jackson.core.io.IOContext;
1616
import com.fasterxml.jackson.core.util.ByteArrayBuilder;
17+
import com.fasterxml.jackson.core.util.JacksonFeatureSet;
18+
1719
import com.fasterxml.jackson.dataformat.xml.PackageVersion;
1820
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
1921
import com.fasterxml.jackson.dataformat.xml.util.CaseInsensitiveNameSet;
@@ -32,6 +34,15 @@ public class FromXmlParser
3234
*/
3335
public final static String DEFAULT_UNNAMED_TEXT_PROPERTY = "";
3436

37+
/**
38+
* XML format has some peculiarities, indicated via new (2.12) capability
39+
* system.
40+
*
41+
* @since 2.12
42+
*/
43+
public JacksonFeatureSet<StreamReadCapability> XML_READ_CAPABILITIES =
44+
DEFAULT_READ_CAPABILITIES.with(StreamReadCapability.DUPLICATE_PROPERTIES);
45+
3546
/**
3647
* Enumeration that defines all togglable features for XML parsers.
3748
*/
@@ -217,7 +228,13 @@ public void setCodec(ObjectCodec c) {
217228
public void setXMLTextElementName(String name) {
218229
_cfgNameForTextElement = name;
219230
}
220-
231+
232+
/*
233+
/**********************************************************************
234+
/* Overrides: capability introspection methods
235+
/**********************************************************************
236+
*/
237+
221238
/**
222239
* XML format does require support from custom {@link ObjectCodec}
223240
* (that is, {@link XmlMapper}), so need to return true here.
@@ -228,7 +245,18 @@ public void setXMLTextElementName(String name) {
228245
public boolean requiresCustomCodec() {
229246
return true;
230247
}
231-
248+
249+
@Override
250+
public boolean canReadObjectId() { return false; }
251+
252+
@Override
253+
public boolean canReadTypeId() { return false; }
254+
255+
@Override
256+
public JacksonFeatureSet<StreamReadCapability> getReadCapabilities() {
257+
return XML_READ_CAPABILITIES;
258+
}
259+
232260
/*
233261
/**********************************************************
234262
/* Extended API, configuration
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.fasterxml.jackson.dataformat.xml.stream;
2+
3+
import com.fasterxml.jackson.core.JsonParser;
4+
import com.fasterxml.jackson.core.StreamReadCapability;
5+
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
6+
import com.fasterxml.jackson.dataformat.xml.XmlTestBase;
7+
8+
public class StreamCapabilitiesTest extends XmlTestBase
9+
{
10+
private final XmlMapper MAPPER = newMapper();
11+
12+
public void testReadCapabilities() throws Exception
13+
{
14+
try (JsonParser p = MAPPER.createParser("<root />")) {
15+
assertTrue(p.getReadCapabilities().isEnabled(StreamReadCapability.DUPLICATE_PROPERTIES));
16+
}
17+
}
18+
}

0 commit comments

Comments
 (0)