2009-09-06 15 views
5

Estoy tratando de escribir un servicio web para la api java.util.logging. Así que escribí una clase MyLogRecord que hereda de LogRecord. Anoté esta clase con anotaciones JAX-B, incluido @XmlAccessorType(XmlAccessType.NONE), por lo que ignoraría los campos y propiedades no anotados. Cuando inicio tomcat, recibo errores que java.util.logging.Level y otras clases java.util.logging no tienen un constructor predeterminado, pero ninguno de mis métodos anotados hacen referencia alguna a la clase Level o cualquiera de las otras clases java.util.logging. Estos son referenciados por la clase padre.¿Cómo puedo ignorar una superclase?

Mi subclase tiene todo lo que necesita definido. ¿Cómo puedo hacer que JAX-B ignore completamente la clase padre?

Actualización: Encontré another post on this, lo que sugiere modificar la clase principal. Esto obviamente no es posible porque extiendo una clase java.util. ¿Hay alguna manera de hacer esto sin modificar la superclase?

Update2: Encontré a thread on java.net para un problema similar. Ese hilo resultó en un enhancement request, que se marcó como un duplicado de another issue, lo que dio como resultado la anotación @XmlTransient. Los comentarios sobre estos informes de errores me llevan a creer que esto es imposible en la especificación actual.

+0

Por qué no usar la composición en lugar de la herencia y envuelve una LogRecord en lugar de extenderlo? – Yishai

+0

Tener que convertir de ida y vuelta parece más torpe que esto. No veo ninguna razón por la que esto no sea posible. Mi mayor preocupación es por qué XmlAccessType.NONE no afectó a la superclase. –

Respuesta

2

Debe marcar la clase principal @XmlTransient. Dado que la clase para padres está en el JRE y usted no puede modificarla, necesita un mecanismo alternativo.

El EclipseLink JAXB (moxy) aplicación ofrece un medio de representar los metadatos como XML que se puede utilizar:

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

Puede especificar algunos de los metadatos utilizando anotaciones, y el resto como XML. A continuación se muestra lo que el documento se vería así:

<java-types> 

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

</java-types> 

Cuestiones relacionadas