Можно ли заменить версию реализации 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
3 ответов
использовать Java Одобрил Механизм Переопределения Стандартов
положить jaxb-api-2.2.4.jar
внутри опции
javac -Djava.endorsed.dirs=/your/path/to/jaxb-directory CompileTest.java
References:
http://docs.oracle.com/javase/6/docs/technotes/guides/standards/
используйте концепцию папки "одобренные библиотеки". Взгляните сюда: Как я могу заставить Ant использовать JAXB x вместо классов Java 6 SE JAXB ...
в основном это способ проинструктировать JRE использовать более позднюю версию JAXB.
вы можете прочитать больше здесь: неофициальное руководство по JAXB: использование JAXB 2 с SE 6 Также см. Этот вопрос: каков точный способ использования одобренного каталога в JRE 6
Он может применяться только в поле или методе, а не в параметре метода. См.
@Retention(RUNTIME) @Target({FIELD, METHOD})
public @interface XmlElement {
Edit: источник 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
цели.
Edit: Итак, ваша проблема-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