Примечание: Я являюсь лидером EclipseLink JAXB (MOXy) и членом группы экспертов JAXB ( JSR-222 ).
Можно ли создать только один класс?
Да, это можно сделать несколькими способами:
- Использование
XmlAdapter
- Использование расширения
@XmlPath
MOXy
Вариант 1 - XmlAdapter
Этот подход аналогичен тому, что было предложено только по skaffman он не позволяет логики модели вашего домена:
package forum6871469;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.adapters.XmlAdapter;
public class DogAdapter extends XmlAdapter<DogAdapter.Dog, String> {
@Override
public Dog marshal(String name) throws Exception {
Dog dog = new Dog();
dog.name = name;
return dog;
}
@Override
public String unmarshal(Dog dog) throws Exception {
return dog.name;
}
public static class Dog {
@XmlAttribute
public String name;
}
}
На ссылку XmlAdapter
ссылается аннотация @XmlJavaTypeAdaper
:
package forum6871469;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
@XmlRootElement
public class Animals{
private String dog; // value of this field should be "Pluto"
@XmlJavaTypeAdapter(DogAdapter.class)
public String getDog() {
return dog;
}
public void setDog(String dogName) {
dog = dogName;
}
}
для получения дополнительной информации
Вариант 2 - расширение @XmlPath MOXy
Вы можете использовать расширение @XmlPath
в MOXy для сопоставления этого варианта использования:
package forum6871469;
import javax.xml.bind.annotation.XmlRootElement;
import org.eclipse.persistence.oxm.annotations.XmlPath;
@XmlRootElement
public class Animals{
private String dog; // value of this field should be "Pluto"
@XmlPath("dog/@name")
public String getDog() {
return dog;
}
public void setDog(String dogName) {
dog = dogName;
}
}
Для получения дополнительной информации