2009-09-06 16 views
5

Sto provando a scrivere un servizio Web per l'API java.util.logging. Così ho scritto una classe MyLogRecord che eredita da LogRecord. Ho annotato questa classe con annotazioni JAX-B, incluso @XmlAccessorType(XmlAccessType.NONE) in modo da ignorare i campi e le proprietà non annotati. Quando avvio Tomcat, ottengo errori che le classi e altre java.util.logging non hanno un costruttore predefinito, ma nessuno dei miei metodi annotati fa alcun riferimento alla classe Level o alle altre classi java.util.logging. Questi sono referenziati dalla classe genitore.Come posso ignorare una superclasse?

La mia sottoclasse ha tutto ciò che è necessario definire. Come posso far sì che JAX-B ignori completamente la classe genitore?

Aggiornamento: ho trovato another post on this, che suggerisce di modificare la classe genitore. Questo ovviamente non è possibile perché sto estendendo una classe java.util. C'è un modo per farlo senza modificare la superclasse?

Update2: Ho trovato a thread on java.net per un problema simile. Tale thread ha generato un enhancement request, contrassegnato come duplicato di another issue, che ha provocato l'annotazione @XmlTransient. I commenti su questi bug report mi portano a credere che questo sia impossibile nelle specifiche attuali.

+0

perché non utilizzare la composizione, invece di eredità e avvolgere un LogRecord piuttosto che estendono esso? – Yishai

+0

Dovendo convertire avanti e indietro sembra più maldestro di questo. Non vedo ragioni per cui questo non dovrebbe essere possibile. La mia più grande preoccupazione è perché XmlAccessType.NONE non ha influenzato la superclasse. –

risposta

2

È necessario contrassegnare la classe padre @XmlTransient. Poiché la classe genitore si trova nel JRE e non può essere modificata dall'utente, è necessario un meccanismo alternativo.

L'EclipseLink JAXB (moxy) implementazione offre un mezzo per rappresentare i metadati in formato XML che si potrebbe usare:

http://wiki.eclipse.org/EclipseLink/Examples/MOXy/EclipseLink-OXM.XML

È possibile specificare alcuni dei metadati utilizzando le annotazioni, e il resto come XML. Qui di seguito è quello che il documento sarà simile:

<java-types> 

    <java-type name="java.util.logging.LogRecord" xml-transient="true"/> 

</java-types> 

Problemi correlati