Можно ли заменить версию реализации JAXB в 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

Ответ 1

Используйте Механизм переопределения стандартов, одобренных 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/

Ответ 2

Используйте концепцию папки "поддерживаемых библиотек". Посмотрите здесь: Как я могу сделать Ant использовать JAXB x вместо классов Java 6 SE JAXB...

В принципе, это способ дать JRE возможность использовать более новую версию JAXB.

Вы можете прочитать больше здесь: Неофициальное руководство по JAXB: Использование JAXB 2 с SE 6 Также см. Этот вопрос: Каков точный способ использования одобренного каталога в JRE 6

Ответ 3

Его можно применять только в поле или методе, а не в параметре метода. См

@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, имеющую только теги 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