Существует несколько различных вариантов обработки этого варианта использования:
Опция № 1 - XmlAdapter (любая реализация JAXB) * 1004 *
Вы можете использовать XmlAdapter
для этого варианта использования. Это будет работать до тех пор, пока из объекта Entity
будет получено только одно значение атрибута:
EntityAdapter
import javax.xml.bind.annotation.adapters.XmlAdapter;
public class EntityAdapter extends XmlAdapter<String, Entity>{
@Override
public String marshal(Entity entity) throws Exception {
if(null == entity) {
return null;
}
return entity.getName();
}
@Override
public Entity unmarshal(String name) throws Exception {
Entity entity = new Entity();
entity.setName(name);
return entity;
}
}
Местное
XmlAdapter связан с полем / свойством с помощью аннотации @XmlJavaTypeAdapter
:
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
@XmlRootElement
public class Local {
private Entity entity;
public void setEntity(Entity entity) {
this.entity = entity;
}
@XmlAttribute
@XmlJavaTypeAdapter(EntityAdapter.class)
public Entity getEntity() {
return entity;
}
}
Для получения дополнительной информации
<Ч />
Опция № 2 - @XmlPath (EclipseLink JAXB (MOXy)
Как вариант, если вы используете EclipseLink JAXB (MOXy) , вы можете использовать расширение @XmlPath
. Это полезно, когда объект Entity
соответствует нескольким атрибутам XML:
Местное
Указание XPath "." указано, что дочернее содержимое будет записано в родительский элемент
import javax.xml.bind.annotation.*;
import org.eclipse.persistence.oxm.annotations.*;
@XmlRootElement
public class Local {
private Entity entity;
public void setEntity(Entity entity) {
this.entity = entity;
}
@XmlPath(".")
public Entity getEntity() {
return entity;
}
}
Entity
public class Entity {
private String name;
private String comment;
public void setName(String name){
this.name = name;
}
@XmlAttribute(name="entityName")
public String getName(){
return this.name;
}
public void setComment(String comment){
this.comment = comment;
}
@XmlAttribute(name="entityComment")
public String getComment(){
return this.comment;
}
}
Для получения дополнительной информации