Выглядите активный объект с помощью JAXB?

Я пытаюсь маршалировать класс, который расширяет поток до XML, код выглядит следующим образом:

@XmlRootElement
public class TransitionXML extends Thread {

ArcXML[] preArcs;
ArcXML[] postArcs;
int[] preArcTokens;
int[] postArcTokens;
int leastTime;
int longestTime;
String name;

//some methods 

//a lot of get-set

@Override
public void run() {
    while (true) {
        if (this.postTransition() & this.preTransition()) {
            //We take out the tokens.
            this.executePreTranstion();
            this.checkPreTransition();


            try {
                this.sleep(1000 * this.getTimeToPass());
            } catch (InterruptedException ex) {
                Logger.getLogger(TransitionXML.class.getName()).log(Level.SEVERE, null, ex);
            }

            //We see if we can put them in.
            if (this.postTransition()) {
                this.executePostTranstion();
                this.checkPostTransition();
            }

        } else {
            try {
                this.sleep(2000);
            } catch (InterruptedException ex) {
                Logger.getLogger(TransitionXML.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
}


}

public TransitionXML()
{

}

}

}

Что приводит меня к этой ошибке: com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 2 counts of IllegalAnnotationExceptions java.lang.Thread$UncaughtExceptionHandler is an interface, and JAXB can't handle interfaces. ... java.lang.Thread$UncaughtExceptionHandler does not have a no-arg default constructor.

Если я правильно понял это, тот факт, что он расширяет поток, вызывает эту проблему, но я не видел решения в сети.

Кто-нибудь знает решение или обходной путь для этого, кроме того, чтобы сделать класс объектом, который реализует работоспособный?

1 ответ

Решение

Примечание: я являюсь лидером EclipseLink JAXB (MOXy) и являюсь членом экспертной группы JAXB (JSR-222).

Если вы используете MOXy в качестве поставщика JAXB, то вы можете использовать свой TransitionXML класс как есть. Это связано с тем, что MOXy не будет пытаться создавать метаданные для классов в java или же javax пакет, такой как java.lang.Thread,

Вы можете получить двоичный файл MOXy из следующего местоположения:

Чтобы указать MOXy в качестве вашего JAXB-провайдера, вам нужно поместить файл с именем jaxb.properties в том же пакете, что и классы вашего домена, со следующей записью (см. http://blog.bdoughan.com/2011/05/specifying-eclipselink-moxy-as-your.html).

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory
Другие вопросы по тегам