Как RuntimeAnnotationReader может использоваться для аннотаций JAXB для чтения пользовательских аннотаций и полей класса управления во время выполнения. Если поиск в google я нашел эту ссылку http://glassfish.10926.n7.nabble.com/injecting-JAXB-annotations-at-runtime-td59852.html, но я не смог собрать много информации о RuntimeAnnotationReader. У меня есть следующий reqirement: Предположим, у меня есть имя класса Person.javaRuntimeAnnoatationReader для чтения пользовательских аннотаций
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlSeeAlso;
@XmlRootElement(name="Person")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlSeeAlso({Student.class})
public class Person <T>{
private T payload;
@XmlElement(name = "Person-Name")
private String name;
public void setPayload(T payload){
this.payload = payload;
}
public T getPayload(){
return payload;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
}
и student.java:
package RuntimeAnnotation;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Student {
@XmlElement
private String name;
@XmlElement
private String id;
public void setName(String name) {
this.name = name;
}
public String getName(){
return name;
}
public void setId(String id){
this.id = id;
}
public String getId(){
return id;
}
}
При инициализации объекта класса человек, я устанавливаю полезной нагрузки поля в качестве объекта студентов , Теперь, когда маршаллинг XML-вывода показывает полезную нагрузку как тэг, но я хочу, чтобы учащийся должен появиться в тэге.
Marshal выход:
<Person>
<payload xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="student">
<name>ABC</name>
<id>239423</id>
</payload>
<Person-Name>XYZ</Person-Name>
</Person>
Ожидаемый результат:
<Person>
<T>
<name>ABC</name>
<id>239423</id>
<T>
<Person-Name>XYZ</Person-Name>
</Person>
P.S .: должно быть имя параметризованных класса. В приведенном выше случае T должен быть Student.
Посмотрите, поможет ли этот ответ на SO. http://stackoverflow.com/questions/9799837/insert-custom-annotation-in-java-field-using-annotate-plugin-jaxb-upon-xsd –
аннотировать плагин позволяет загружать аннотаций из XML-ресурса, должен быть создан до компиляции. Я хочу добавить аннотацию в поле во время выполнения. – user2122853