4 Stimmen

Ignorieren der Groß-/Kleinschreibung von Elementnamen in JaxB

Wie im Titel angegeben, möchte ich die Groß-/Kleinschreibung von Elementnamen in einem Dokument ignorieren.

static class XY433 {
    @XmlAttribute(name = "C200")
    String c200;
    @XmlAttribute(name = "C215")
    String c215;

    @XmlAttribute(name="F001")
    String f001;

    @XmlAttribute(name="f001")
    String lcf001; // I want to avoid this duplication
}

Ich habe versucht, den von Blaise Doughan veröffentlichten Code zu verwenden:

private static class ToLowerCaseNamesStreamReaderDelegate extends StreamReaderDelegate {

    public ToLowerCaseNamesStreamReaderDelegate(XMLStreamReader xsr) {
        super(xsr);
    }

    @Override
    public String getAttributeLocalName(int index) {
        return super.getAttributeLocalName(index).toLowerCase();
    }

    @Override
    public String getLocalName() {
        return super.getLocalName().toLowerCase();
    }

}

@XmlRootElement(name="doc")
static class Doc {
    @XmlElement(name="element")
    List<Element> elements;
}

static class Element {
    @XmlAttribute(name = "abc")
    String abc;
}

public static void main(String[] args) throws Exception {
    XMLInputFactory xif = XMLInputFactory.newInstance();
    XMLStreamReader xsr = xif.createXMLStreamReader(new FileInputStream("LowerCaseElementNamesFilterTest.xml"));

    Unmarshaller u = JAXBContext.newInstance(Doc.class).createUnmarshaller();

    //Do unmarshalling
    Doc doc = (Doc) u.unmarshal(new ToLowerCaseNamesStreamReaderDelegate(xsr));

    System.out.println(doc.elements.get(0).abc);
    System.out.println(doc.elements.get(1).abc);
    System.out.println(doc.elements.get(2).abc);

}

Das hat nicht wirklich funktioniert.

null
2
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 2, Size: 2
    at java.util.ArrayList.RangeCheck(ArrayList.java:546)
    at java.util.ArrayList.get(ArrayList.java:321)
    at com.hre.commons.tec.xml.LowerCaseElementNamesFilter.main(LowerCaseElementNamesFilter.java:58)

Für diese XML:

<doc>
    <Element ABC="1"></Element>
    <element Abc="1"></element>
    <element abc="2"></element>
</doc>

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X