2013-04-25 17 views
10

私は私のJavaのバージョンがJava JRE 1.6 SEでJAXB実装のバージョンを置き換えることはできますか?

$ 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のために有効だある

import javax.xml.bind.annotation.XmlElement; 

class CompileTest { 

    void foo(@XmlElement String in) { 
    } 

} 

このテストクラスを持っていますクラスパスに新しいJAXBライブラリを追加しようとしたとき、それは役に立たなかった。これを解決する方法はありますか?

javac -cp jaxb-api-2.2.4.jar CompileTest.java 
+0

エラーが異なる(新しいから、実際には、コンパイラからです)バージョンの言語を使用します。したがって、瓶を交換することは効果がありません。あなたがJava 6を使ってみませんか? – talonx

+0

私は分かりません。 "...別の(新しい)バージョンの言語から..."、何? 「ちょっと不思議なことに、Java 6を使ってみませんか?私は多分それはJava 7でなければならないかもしれません。なぜなら、6から7に移行することができないからです。実際にはJava 6が実際に生産されています。 – Betlista

+0

@Betlista - 同様の質問と解決策はhttp://stackoverflow.com/質問/ 8211420/xmlelement-annotation-dissallowed-with-webparam –

答えて

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/

+0

私はすべてのapのjavaインストールを変更する必要はないので、java.endorsed.dirsパラメータが好きです... – Betlista

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バージョンが利用可能な唯一のFIELDMETHODターゲットを持つ1.19改訂のXmlElementを持っています。

編集:問題は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

+0

「... Java 6では有効です...」、「...」私はクラスパスに新しいJAXBライブラリを追加しようとしました..."、ターゲットは' @Target({FIELD、METHOD、PARAMETER})です。 – Betlista

+0

@harsh - Java 6では、@Target(value = {FIELD、METHOD、PARAMETER})と宣言されています。 oracle.com/javaee/6/api/javax/xml/bind/annotation/XmlElement.html –

+0

Java 6で 'jaxb-api-2.2.4.jar'のクラスを使用する方法を尋ねています – Betlista

4

"保証ライブラリ"フォルダの概念を使用してください。ここをクリックしてください: How can I make Ant use JAXB x instead of Java 6 SE JAXB classes ...

これは、JREにより新しいバージョンのJAXBを使用するように指示する方法です。

あなたがここで詳細を読むことができます: Unofficial guide to JAXB: Using JAXB 2 with SE 6 はまた、この質問を参照してください。 What is the exact way to use endorsed directory in JRE 6

+0

私はRaviの答えが私よりも優れていると思います - Ravi - 私はやった! – GrahamMc

関連する問題