Attribute / element name collision (same local name, different namepace) cannot be configured during deserialization

Offen
#65 9 Kommentare 9 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Anfängerfreundlichkeit
45/100
Issue-Typ
Bug
Klarheit
Klar beschrieben
Aktivitätsstatus
Veraltet
Tech-Stack
java
Bereich
backend

Rechercherichtung

Beginne mit dem fehlschlagenden Test in com.fasterxml.jackson.dataformat.xml.failing.TestDeserialization, insbesondere mit testAttrElementConflict und seinem MAPPER.readValue-Aufruf. Reproduziere den Fehler, verfolge, wie das Attribut und das Element mit dem Namen state während der Deserialisierung aufgelöst werden, und betrachte das Issue als erledigt, wenn der Test mit stateAttr auf "stateAttr" und state auf "stateElement" gesetzt erfolgreich ist.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

most-wanted name-collision

If an element has an attribute and sub-element with the same name, the attribute seems to be ignored and the element value used, despite collision resolving configuration with @JacksonXmlProperty(localName="state", isAttribute=true) (for colliding name state). Here is concrete example

static class TwoStates {
  @JacksonXmlProperty(localName="state", isAttribute=true)
  public String stateAttr = "NOT SET";
  public String state = "NOT SET";
}

The following input should deserialize the appropriate distinct values into the appropriate distinct fields:
<Wrapper state='stateAttr'><state>stateElement</state></Wrapper>

Here is a failing test snippet for com.fasterxml.jackson.dataformat.xml.failing.TestDeserialization

        private static class TwoStates
    {
        @JacksonXmlProperty(localName="state", isAttribute=true)
        public String stateAttr = "NOT SET";
        public String state = "NOT SET";

        @Override public String toString() { return "TwoStates: stateAttr: " + stateAttr + " state: " + state; }
    }

    public void testAttrElementConflict() throws Exception
    {
        TwoStates ob = MAPPER.readValue("<Wrapper state='stateAttr'><state>stateElement</state></Wrapper>",
                TwoStates.class);
        assertNotNull(ob);
                System.err.println("ob: " + ob);
        assertEquals("stateElement", ob.state);
        assertEquals("stateAttr", ob.stateAttr); // attribute stateAttr is ignored so this fails
    }
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

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus FasterXML/jackson-dataformat-xml

Alle Issues in FasterXML/jackson-dataformat-xml

Ähnliche Issues

Weitere Issues zu Java

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.