2009-08-12 23 views
7

Estoy tratando de usar una solución para serializar excepciones usando jaxb. (http://forums.java.net/jive/thread.jspa?messageID=256122)paquete com.sun.xml.internal.bind.v2.model.annotation no existe

La clase que necesito implementar para esa solución requiere hacer referencia a las siguientes clases com.sun.

import com.sun.xml.internal.bind.v2.model.annotation.AbstractInlineAnnotationReaderImpl; 
import com.sun.xml.internal.bind.v2.model.annotation.Locatable; 
import com.sun.xml.internal.bind.v2.model.annotation.RuntimeAnnotationReader; 
import com.sun.xml.internal.bind.v2.model.annotation.RuntimeInlineAnnotationReader; 

Cuando compilo y ejecuto mi código dentro de Eclipse, funciona bien. Pero cuando compilo el código usando Maven, no se queja de los paquetes com.sun como "package com.sun.xml.internal.bind.v2.model.annotation does not exist".

Tanto eclipse como maven están utilizando JDK 1.6, por lo que no entiendo por qué sucede esto. ¿No son esas clases com.sun dentro del JDK?

EDIT: Finalmente decidí que simplemente no era posible. Simplemente creé un nuevo bean y copié la información que necesitaba y la usé.

Respuesta

16

Si una clase está en el paquete com.sun. *, significa que fue desarrollada por Sun, no es parte del JDK.

Las clases de sol en el JDK tienen el prefijo sol. * y no son parte de la interfaz pública, por lo que deben utilizarse con cuidado. De Sun FAQ:

Las clases que Sun incluye con Java 2 SDK, Standard Edition, caen en grupos de paquetes java. , javax., org. * Y sun. . Todos menos el sol Los paquetes son una parte estándar de la plataforma Java y se admitirán en el futuro. En general, paquetes como el sol. , que están fuera de la plataforma Java, pueden ser diferentes en todas las plataformas del sistema operativo (Solaris, Windows, Linux, Macintosh, etc.) y pueden cambiar en cualquier momento sin previo aviso con las versiones SDK (1.2, 1.2.1, 1.2.3, etc.) Programas que contienen llamadas directas al sol. paquetes no son 100% Pure Java. En otras palabras:

The java. , javax. y org. * Los paquetes documentados en la Especificación de API de Java 2 Platform Standard Edition constituyen la interfaz pública oficial y compatible.

Si un programa Java llama directamente solo API en estos paquetes, operará en todas las plataformas compatibles con Java, independientemente de la plataforma del sistema operativo subyacente.

Los paquetes sun. * Son no parte de la interfaz pública admitida.

Un programa Java que llama directamente a los paquetes sun. * Es no garantizado para funcionar en todas las plataformas compatibles con Java. De hecho, dicho programa no está garantizado para funcionar incluso en futuras versiones en la misma plataforma.

Una vez dicho esto, las clases que se muestran están disponibles en el repositorio de JBoss en la siguiente artefacto:

<dependency> 
    <groupId>javax.xml</groupId> 
    <artifactId>jaxb-impl</artifactId> 
    <version>2.1</version> 
</dependency> 
Cuestiones relacionadas