9

jaxbを使用して例外をシリアル化するためのソリューションを使用しようとしています。(http://forums.java.net/jive/thread.jspa?messageID=256122

そのソリューションのために実装する必要があるクラスでは、次の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;

Eclipse内でコードをコンパイルして実行すると、正常に機能します。しかし、Mavenを使用してコードをコンパイルすると、「パッケージcom.sun.xml.internal.bind.v2.model.annotationが存在しません」のようなcom.sunパッケージについて文句を言うことができません。

EclipseとMavenの両方がJDK1.6を使用しているため、なぜこれが発生しているのかわかりません。それらのcom.sunクラスはJDK内にありませんか?

編集:私は最終的にそれが不可能であると判断しました。新しいBeanを作成し、必要な情報をコピーして使用しました。

4

1 に答える 1

20

クラスがパッケージcom.sun。*にある場合、それはJDKの一部ではなく、Sunによって開発されたことを意味します。

JDKのSunクラスには接頭辞sun。*が付いており、パブリックでサポートされているインターフェースの一部ではないため、注意して使用する必要があります。SunのFAQから:

SunがJava2SDK、Standard Editionに含めるクラスは、パッケージグループjavaに分類されます。、javax。、org。*およびsun。。太陽以外のすべて。パッケージはJavaプラットフォームの標準部分であり、将来的にサポートされる予定です。一般的に、太陽などのパッケージ。、Javaプラットフォームの外部にあり、OSプラットフォーム(Solaris、Windows、Linux、Macintoshなど)間で異なる可能性があり、SDKバージョン(1.2、1.2.1、1.2.3など)でいつでも予告なしに変更される可能性があります。 )。太陽への直接の呼び出しを含むプログラム。パッケージは100%純粋なJavaではありません。言い換えると:

Java。、javax。Java 2 Platform Standard Edition API仕様に記載されているorg。*パッケージは、サポートされている公式のパブリックインターフェイスを構成します。

JavaプログラムがこれらのパッケージのAPIのみを直接呼び出す場合、基盤となるOSプラットフォームに関係なく、すべてのJava互換プラットフォームで動作します。

sun。*パッケージは、サポートされているパブリックインターフェイスの一部ではありません。

sun。*パッケージを直接呼び出すJavaプログラムは、すべてのJava互換プラットフォームで動作することが保証されているわけではありません。実際、このようなプログラムは、同じプラットフォーム上の将来のバージョンでも機能することが保証されていません。

そうは言っても、リストしたクラスは、JBossリポジトリの次のアーティファクトで利用できます。

<dependency>
  <groupId>javax.xml</groupId>
  <artifactId>jaxb-impl</artifactId>
  <version>2.1</version>
</dependency>
于 2009-08-13T10:59:50.330 に答える