2016-07-05 12 views
0

Ich habe eine Klasse namens Ability, die von einer abstrakten Klasse CampaignObject erbt.JAXB marshals "non-field"

CampaignObject hat eine abstrakte Methode namens getInfo().

Fähigkeiten haben keine eigene Info. Wenn sie nach Informationen gefragt werden, sollten die Informationen ihres Besitzers zur Verfügung gestellt werden.

Wenn ich JAXB.marshal(...) verwenden, um das zu marshalieren, enthält es die Besitzer Info-Text als XmlElement auf jede Fähigkeit. Die Anmerkung Ability.getInfo() mit @XmlTransient macht keinen Unterschied.

Was kann ich tun?

Vielen Dank.

-Code wie folgt aus:

@XmlRootElement(name = "ability") 
public class Ability extends CampaignObject { 


    private String val; 
    private Hero owner; 

    ... 

    @Override 
    @XmlTransient 
    public String getInfo() { 
     return getOwner().getInfo(); 
    } 

    @XmlAttribute 
    public String getVal() { 
     return val; 
    } 

    @XmlTransient 
    public Hero getOwner() { 
     return owner; 
    } 

Antwort

0

Try @XmlAccessorType(XmlAccessType.NONE) Ihrer Klasse hinzugefügt sicher zu sein, es "t alles verwenden doesn außer dem, was Sie für die Abbildung mit Anmerkungen versehen, auf diese Weise sollten Sie auch in der Lage sein, die @XmlTransient zu entfernen Anmerkungen.

+0

Hat nicht geholfen. Weder das Gegenteil noch: 'XmlAccessType.FIELD' –

+0

Änderte die Antwort auf eine andere Idee, die ich hatte. –

0

ich das Problem umgangen haben. ich Refactoring/umbenannt getInfo() in retrieveInfo() und gab alles außer Fähigkeiten einen neuen getInfo().

Wenn jemand eine Idee hat, wie er das Problem lösen kann, bin ich immer noch bereit zu lernen.