0

変更できないクライアントから提供されたxsdがあります。クラスを生成するためにjaxbを使用しています。結果のクラスには、次のようなアノテーションがあります。

@XmlSchemaType(name = "dateTime")
protected XMLGregorianCalendar expires;

GSONを使用してこれをjsonに変換しようとすると、javax.xml.bind.XmlSchemaTypeのclassnotfoundexceptionが発生します。mavenpom.xmlにjavax.xml.bindの依存関係を追加します。

<dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>javax.xml.bind</artifactId>
    <version>3.0-b54</version>
    <scope>compile</scope>
</dependency>

次に、このクレイジーなエラーが発生します。

コアライブラリ以外のものにコアクラス(java。*またはjavax。*)を含めようとします。デスクトップ仮想マシンからコアライブラリ(またはその一部)をアプリケーションに含めようとした可能性があります。これは間違いなく機能しません。少なくとも、アプリとプラットフォームの将来のバージョンとの互換性を危険にさらします。また、合法性が疑わしいこともよくあります。

アプリケーションのコンパイルではなく、完全な仮想マシンディストリビューションの作成の一部としてのみ適切なコアライブラリを実際に構築する場合は、「-core-library」オプションを使用してこのエラーメッセージを抑制します。

先に進んで「--core-library」を使用しているが、実際にアプリケーションをビルドしている場合は、ある時点でアプリケーションのビルドまたは実行に失敗することに注意してください。たとえば、オペレーティングシステムをアップグレードすると、アプリケーションが機能しなくなることに気付いた怒っている顧客に備えてください。あなたはこの問題のせいになります。

コアパッケージに含まれているコードを合法的に使用している場合、最も安全な代替手段は、そのコードを再パッケージ化することです。つまり、問題のクラスを独自のパッケージ名前空間に移動します。これは、それらがコアシステムクラスと競合することは決してないことを意味します。あなたがこれを行うことができないことがわかった場合、それはあなたが進んでいる道が最終的に痛み、苦しみ、悲しみ、そして嘆きにつながることを示しています。

!!!

アノテーションをスキップするか、それらを無視するためにモーグソンを生成しないようにjaxbに指示するか、依存関係を正しくインポートする必要があります。

4

1 に答える 1

0
<scope>provided</scope>

私を修正しました-javax.*の下のすべてがAndroidによって提供されていることに気づきませんでした。

于 2012-12-17T20:56:20.853 に答える