Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

package com.sun.xml.internal.bind.v2.model.annotation does not exist

I'm trying to use a solution for serializing exceptions using jaxb. (http://forums.java.net/jive/thread.jspa?messageID=256122)

The class I need to implement for that solution requires referencing the following com.sun classes.

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;

When I compile and run my code inside of Eclipse it works fine. But when I compile the code using Maven it fails complaining about the com.sun packages like "package com.sun.xml.internal.bind.v2.model.annotation does not exist".

Both eclipse and maven are using JDK 1.6, so I don't understand why this is happening. Aren't those com.sun classes inside the JDK?

EDIT: I ultimately decided it just wasn't possible. I simply created a new bean and copied over the information I needed and used that.

like image 349
HappyEngineer Avatar asked Aug 12 '09 23:08

HappyEngineer


1 Answers

If a class is in the package com.sun.*, it just means it was developed by Sun, not that it is part of the JDK.

Sun classes in the JDK are prefixed sun.* and are not part of the public supported interface so should be used with care. From the Sun FAQ:

The classes that Sun includes with the Java 2 SDK, Standard Edition, fall into package groups java., javax., org.* and sun.. All but the sun. packages are a standard part of the Java platform and will be supported into the future. In general, packages such as sun., that are outside of the Java platform, can be different across OS platforms (Solaris, Windows, Linux, Macintosh, etc.) and can change at any time without notice with SDK versions (1.2, 1.2.1, 1.2.3, etc). Programs that contain direct calls to the sun. packages are not 100% Pure Java. In other words:

The java., javax. and org.* packages documented in the Java 2 Platform Standard Edition API Specification make up the official, supported, public interface.

If a Java program directly calls only API in these packages, it will operate on all Java-compatible platforms, regardless of the underlying OS platform.

The sun.* packages are not part of the supported, public interface.

A Java program that directly calls into sun.* packages is not guaranteed to work on all Java-compatible platforms. In fact, such a program is not guaranteed to work even in future versions on the same platform.

Having said that, those classes you listed are available on the JBoss repository in the following artifact:

<dependency>
  <groupId>javax.xml</groupId>
  <artifactId>jaxb-impl</artifactId>
  <version>2.1</version>
</dependency>
like image 185
Rich Seller Avatar answered Nov 15 '22 17:11

Rich Seller