10

私はこのテストクラスを持っています

import javax.xml.bind.annotation.XmlElement;

class CompileTest {

   void foo( @XmlElement String in ) {
   }

}

私のJavaバージョンは

$ java -version
java version "1.6.0_23"
Java(TM) SE Runtime Environment (build 1.6.0_23-b05)
Java HotSpot(TM) Client VM (build 19.0-b09, mixed mode, sharing)

そして、そのクラスをコンパイルしようとすると、

javac CompileTest.java
CompileTest.java:5: annotation type not applicable to this kind of declaration
   void foo( @XmlElement String in ) {
             ^
1 error

それはJava 6に有効です。新しいJAXBライブラリをクラスパスに追加しようとしたとき、それは役に立ちませんでした。これを解決する方法はありますか?

javac -cp jaxb-api-2.2.4.jar CompileTest.java
4

3 に答える 3

11

Java 承認済み標準オーバーライド メカニズムを使用する

jaxb-api-2.2.4.jar内部<java-home>\lib\endorsedディレクトリを配置します。

または、-D java.endorsed.dirsオプションを使用します。

javac -Djava.endorsed.dirs=/your/path/to/jaxb-directory CompileTest.java

参考文献:
http://docs.oracle.com/javase/6/docs/technotes/guides/standards/

于 2013-04-25T13:20:20.000 に答える
4

「承認されたライブラリ」フォルダーの概念を使用します。こちらをご覧ください: Ant で Java 6 SE JAXB クラスの代わりに JAXB x を使用するにはどうすればよいですか ...

基本的に、これは JRE に最新バージョンの JAXB を使用するよう指示する方法です。

ここで詳細を読むことができます: JAXB の非公式ガイド: SE 6 で JAXB 2 を使用する この質問も参照してください: JRE 6 で承認されたディレクトリを使用する正確な方法は何ですか?

于 2013-04-25T13:14:50.733 に答える
2

メソッド パラメーターではなく、フィールドまたはメソッドでのみ適用できます。見る

@Retention(RUNTIME) @Target({FIELD, METHOD})
public @interface XmlElement {

編集: XmlElement のソース (JDK 1.6.0_18)

 * @since JAXB2.0
 * @version $Revision: 1.19 $
 */

@Retention(RUNTIME) @Target({FIELD, METHOD})
public @interface XmlElement {

したがって、1.6.0_18 バージョンには 1.19 リビジョンの XmlElement がFIELDあり、METHODターゲットのみが利用可能です。

編集:あなたの問題は jdk 1.6 XmlElement が jaxb.2.2 と同じではないことです。ソースはhttp://grepcode.com/file/repo1.maven.org/maven2/javax.xml.bind/jaxb-api/2.2.4/javax/xml/bind/annotation/XmlElement.java?avで確認できます=f

于 2013-04-25T13:02:26.057 に答える