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