簡體   English   中英

是否有可能在Java JRE 1.6 SE中替換JAXB實現的版本?

[英]Is it possible to replace the version of the JAXB implementation in Java JRE 1.6 SE?

我有這個測試課

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

使用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/

使用“endorsed libraries”文件夾的概念。 看看這里: 我如何讓Ant使用JAXB x而不是Java 6 SE JAXB類......

基本上這是一種指示JRE使用更新版本的JAXB的方法。

您可以在這里閱讀更多內容: JAXB的非官方指南:將JAXB 2與SE 6一起使用另請參閱此問題: 在JRE 6中使用已簽名目錄的確切方法是什么

它只能應用於字段或方法,而不能應用於方法參數。 看到

@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版本的XmlElement為1.19版本,只有FIELDMETHOD目標可用。

編輯:所以你的問題是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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM