Comment ignorer boîtier de noms d'élément dans JaxB

Comme indiqué dans le titre je veux ignorer boîtier de noms d'éléments dans un document.

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
}

J'ai essayé d'utiliser le code posté par Blaise Doughan:

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);

}

Cette réalité n'a pas de travail.

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)

Pour ce XML:

<doc>
    <Element ABC="1"></Element>
    <element Abc="1"></element>
    <element abc="2"></element>
</doc>
regardez download.oracle.com/javase/6/docs/api/javax/xml/bind/annotation/... et ce queistion est très similaire à stackoverflow.com/questions/659872/... 🙂
Comment est ma question relative à ce super classe en question? Comment puis-je utiliser le AccessType? Ma question est sur le f001 et lcf001. Je veux juste un champ lié à "F001" et "f001".
Pouvez-vous préciser pourquoi vous voulez remplacer la casse de la nature de XML? Est-ce parce que vous n'êtes pas dans le contrôle des données entrantes?
Oui, il est produit à partir d'une application existante.
Et même le wsdl permet par définition de chaque élément dans tous les cas. 🙁

OriginalL'auteur tkr | 2010-12-07