XmlMapper with `FAIL_ON_UNKNOWN_PROPERTIES` fails on whitespace-only element
Bewertung
- Schwierigkeit
- 3/5
- Geschätzter Aufwand
- 1-2 Tage
- Anfängerfreundlichkeit
- 68/100
Rechercherichtung
Beginne mit der Reproduktion JacksonXmlWhitespaceOnlyContentTest.deserializesWhitespaceOnlyElementContent und dem XmlMapper-Builder, der mit FAIL_ON_UNKNOWN_PROPERTIES konfiguriert ist. Verfolge, wie der Inhalt, der nur aus Leerraum besteht, innerhalb von Item zu einer Eigenschaft mit leerem Namen wird. Die Aufgabe ist erledigt, wenn der Test besteht, während echte unbekannte Eigenschaften weiterhin fehlschlagen.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
Search before asking
- I searched in the issues and found nothing similar.
Describe the bug
Take this XML:
<Response>
<Item name="example">
</Item>
</Response>
If I want to deserialize that Item element into record Item(String name), I'm faced with this error:
Unrecognized property "" (class me.retrodaredevil.randomjunkk.JacksonXmlWhitespaceOnlyContentTest$Item), not marked as ignorable (one known property: "name")
at [No location information] (through reference chain: me.retrodaredevil.randomjunkk.JacksonXmlWhitespaceOnlyContentTest$Response["Item"]->me.retrodaredevil.randomjunkk.JacksonXmlWhitespaceOnlyContentTest$Item[""])
tools.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized property "" (class me.retrodaredevil.randomjunkk.JacksonXmlWhitespaceOnlyContentTest$Item), not marked as ignorable (one known property: "name")
at [No location information] (through reference chain: me.retrodaredevil.randomjunkk.JacksonXmlWhitespaceOnlyContentTest$Response["Item"]->me.retrodaredevil.randomjunkk.JacksonXmlWhitespaceOnlyContentTest$Item[""])
at tools.jackson.databind.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:53)
at tools.jackson.databind.DeserializationContext.handleUnknownProperty(DeserializationContext.java:1378)
at tools.jackson.databind.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:2099)
at tools.jackson.databind.deser.bean.BeanDeserializerBase.handleUnknownProperty(BeanDeserializerBase.java:2032)
at tools.jackson.databind.deser.bean.BeanDeserializerBase.handleUnknownProperties(BeanDeserializerBase.java:1957)
at tools.jackson.databind.deser.bean.BeanDeserializer._deserializeUsingPropertyBased(BeanDeserializer.java:922)
at tools.jackson.databind.deser.bean.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1695)
at tools.jackson.databind.deser.bean.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:629)
at tools.jackson.databind.deser.bean.BeanDeserializer.deserialize(BeanDeserializer.java:200)
at tools.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:568)
at tools.jackson.databind.deser.bean.BeanDeserializer._deserializeWithErrorWrapping(BeanDeserializer.java:943)
at tools.jackson.databind.deser.bean.BeanDeserializer._deserializeUsingPropertyBased(BeanDeserializer.java:775)
at tools.jackson.databind.deser.bean.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1695)
at tools.jackson.databind.deser.bean.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:629)
at tools.jackson.databind.deser.bean.BeanDeserializer.deserialize(BeanDeserializer.java:200)
at tools.jackson.dataformat.xml.deser.XmlDeserializationContext.readRootValue(XmlDeserializationContext.java:69)
at tools.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2666)
at tools.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:1556)
at me.retrodaredevil.randomjunkk.JacksonXmlWhitespaceOnlyContentTest.deserializesWhitespaceOnlyElementContent(JacksonXmlWhitespaceOnlyContentTest.java:27)
This is an issue for more complicated XML data, specifically data like this:
<Item name="thing">
<AnotherElement name="thing"/>
</Item>
I run into this problem because Item typically has nested elements inside of it, but when it doesn't, the whitespace data within it is treated as a special blank string property.
Version Information
Jackson 3.2.1
Reproduction
import com.fasterxml.jackson.annotation.JsonProperty;
import org.junit.jupiter.api.Test;
import tools.jackson.databind.DeserializationFeature;
import tools.jackson.dataformat.xml.XmlMapper;
import static org.junit.jupiter.api.Assertions.assertEquals;
class JacksonXmlWhitespaceOnlyContentTest {
// This test fails because whitespace-only element content is exposed as an empty-named property.
@Test
void deserializesWhitespaceOnlyElementContent() {
XmlMapper mapper = XmlMapper.builder()
.enable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)
.build();
String xml = """
<Response>
<Item name="example">
</Item>
</Response>
""";
Response response = mapper.readValue(xml, Response.class);
assertEquals(new Item("example"), response.item());
}
record Response(
@JsonProperty("Item") Item item
) {
}
record Item(String name) {
}
}
Expected behavior
FAIL_ON_UNKNOWN_PROPERTIES should only cause failures when there are actual properties that are unknown. I don't think this weird empty string property edge case should cause a failure here.
Additional context
No response
- Vorherrschende Sprache
- Java
- Sterne
- 636
- Forks
- 250
- Ø Merge
- 7 Std. 10 Min.
- Gemergte PRs (30 T.)
- 8
Entwicklungsumgebung
Dieses Projekt bietet weder Dev-Container noch Dockerfile noch Beitragsleitfaden – die Einrichtung liegt bei Ihnen. Beginnen Sie mit der README; die allgemeinen Schritte stehen in unserem Leitfaden für den ersten Beitrag.
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus FasterXML/jackson-dataformat-xml
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 85/100
-
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 55/100
-
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 45/100
FasterXML/jackson-dataformat-xml#931 · 3 Kommentare ·
-
3.x
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 25/100
FasterXML/jackson-dataformat-xml#787 · 1 Kommentar ·
-
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 35/100
FasterXML/jackson-dataformat-xml#712 · 3 Kommentare ·
Alle Issues in FasterXML/jackson-dataformat-xml
Ähnliche Issues
-
Cleanup: restore the interrupt flag in AiFailureAnalyzerEvtl. vergeben @Rishankgupta08 hat das heute übernommen. Offengood first issue
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 82/100
seleniumboot/selenium-boot#258 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 70/100
dense-analysis/ale#5181 ·
-
bug subsystem:agent-harness triage
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 76/100
ShaftHQ/SHAFT_ENGINE#8043 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 88/100
johanhaleby/occurrent#1505 ·
Maintainer antworten meist innerhalb von 1 Tag
-
bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
Maintainer antworten meist innerhalb von 1 Tag