2009-09-06 4 views
5

Я пытаюсь написать веб-службу для java.util.logging api. Поэтому я написал класс MyLogRecord, который наследуется от LogRecord. Я аннотировал этот класс с аннотациями JAX-B, включая @XmlAccessorType(XmlAccessType.NONE), поэтому он игнорировал бы не аннотированные поля и свойства. Когда я запускаю tomcat, я получаю ошибки, которые java.util.logging.Level и другие классы java.util.logging не имеют конструктора по умолчанию, но ни один из моих аннотированных методов не ссылается на класс уровня или любой другой класс java.util.logging. Они ссылаются на родительский класс.Как игнорировать суперкласс?

В моем подклассе есть все необходимое. Как я могу заставить JAX-B полностью игнорировать родительский класс?

Обновление: Я нашел another post on this, в котором предлагается изменить родительский класс. Это, очевидно, невозможно, потому что я расширяю класс java.util. Есть ли способ сделать это без изменения суперкласса?

Update2: Я нашел a thread on java.net для аналогичной проблемы. Эта нить привела к enhancement request, который был помечен как дубликат another issue, в результате чего была сделана аннотация @XmlTransient. Комментарии к этим сообщениям об ошибках заставляют меня думать, что это невозможно в текущей спецификации.

+0

Почему бы не использовать композицию вместо наследования и обернуть LogRecord, а не продлить его? – Yishai

+0

Необходимость конвертировать туда и обратно кажется более неуклюжим, чем это. Я не вижу причин, чтобы это было невозможно. Моя самая большая проблема заключается в том, почему XmlAccessType.NONE не повлиял на суперкласс. –

ответ

2

Необходимо указать родительский класс @XmlTransient. Поскольку родительский класс находится в JRE и не может быть изменен вами, вам нужен альтернативный механизм.

EclipseLink JAXB (Moxy) реализация предлагает средство представления метаданных, как XML, которые вы могли бы использовать:

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

Вы можете указать некоторые из метаданных с помощью аннотаций, а остальное, как XML. Ниже то, что ваш документ будет выглядеть следующим образом:

<java-types> 

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

</java-types> 

Смежные вопросы