Bonjour,

J'essaie d'ajouter JAXB à mon projet pour mapper mon modèle de données et me faciliter théoriquement le travail de sauvegarde / restauration. J'ai cependant cette erreur, et j'ai du mal à comprendre comment, avec JAXB, je peux la résoudre.

Je vois bien quel est le souci mais j'ignore comment on est censé mapper cela en JAXB.

Une des classes, en gros:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public abstract class AbstractElementAnimation<CP extends AbstractControlPoint<CP, N>, N extends AbstractElement<CP, N>> {
 
    //.....
    @XmlAttribute(name="identifier")
    public String getId() {
        return id;
    }
 
    @XmlElement
    public SortedMap<Integer, N> getKeySteps() {
        return Collections.unmodifiableSortedMap(keySteps);
    }
 
    public void setKeySteps(Map<Integer,N> steps) {
            //.....
        }
L'erreur:
com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 2 counts of IllegalAnnotationExceptions
java.util.SortedMap is an interface, and JAXB can't handle interfaces.
this problem is related to the following location:
at java.util.SortedMap
at public java.util.SortedMap com.company.model.AbstractElementAnimation.getKeySteps()
at com.company.model.AbstractElementAnimation
at com.company.model.FrontAnimation
java.util.SortedMap does not have a no-arg default constructor.
this problem is related to the following location:
at java.util.SortedMap
at public java.util.SortedMap com.company.model.AbstractElementAnimation.getKeySteps()
at com.company.front.model.AbstractElementAnimation
at com.company.model.FrontAnimation
at com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException$Builder.check(IllegalAnnotationsException.java:91)
at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(JAXBContextImpl.java:436)
at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:277)
at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(JAXBContextImpl.java:1100)
at com.sun.xml.internal.bind.v2.ContextFactory.createContext(ContextFactory.java:143)
at com.sun.xml.internal.bind.v2.ContextFactory.createContext(ContextFactory.java:110)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.lang.reflect.Method.invoke(Method.java:597)
at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:202)
at javax.xml.bind.ContextFinder.find(ContextFinder.java:376)
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:574)
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:522)
at com.company.model.AnimationPersistance.persist(AnimationPersistance.java:13)
at com.company.model.AnimationPersistanceTest.test(AnimationPersistanceTest.java:61)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.lang.reflect.Method.invoke(Method.java:597)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Autrement dit, comment peut-on mapper une interface avec JAXB ?

Merci d'avance pour votre aide.