У меня есть следующие объектыКак изменить имя элемента XmlRootElement в JAXB, находящемся на объекте?
пленочных
@Entity
@Table(name="film")
@XmlRootElement(name = "film")
public class Film implements Serializable {
@Id
@Column(name="id")
private String fbId;
@Column(name="title")
private String title;
@ManyToMany
@JoinTable(
name="direction",
joinColumns={@JoinColumn(name="film", referencedColumnName="id")},
inverseJoinColumns={@JoinColumn(name="person", referencedColumnName="id")})
private Collection<Person> directors;
@OneToMany(cascade={CascadeType.ALL}, mappedBy="film")
@MapKey(name="character")
private Map<String, Performance> performances;
//GETTERS
@XmlAttribute(name = "fbId")
public String getFreebaseId() {
return this.fbId;
}
@XmlElementRefs({
@XmlElementRef(name="director", type=Person.class)
})
public Collection<Person> getDirectors() {
return this.directors;
}
@XmlAnyElement(lax=true)
public Collection<Performance> getPerformances() {
ArrayList performancesArray = new ArrayList<Performance>();
for (Map.Entry<String, Performance> entry : this.performances.entrySet()) {
Performance value = entry.getValue();
performancesArray.add(value);
}
return performancesArray;
}
}
Человек
@Entity
@Table(name="person")
public class Person implements Serializable {
@Id
@Column(name="id")
private String fbId;
@Column(name="first_name")
private String firstName;
@Column(name="last_name")
private String lastName;
@OneToMany(cascade={CascadeType.ALL}, mappedBy="actor")
@XmlTransient
private Collection<Performance> performances;
//GETTERS
@XmlAttribute(name = "fbId")
public String getFreebaseId() {
return this.fbId;
}
@XmlElement(name = "firstName")
public String getFirstName() {
return this.firstName;
}
@XmlElement(name = "lastName")
public String getLastName() {
return this.lastName;
}
@XmlTransient
public Collection<Performance> getPerformances() {
return this.performances;
}
}
Каждый фильм имеет один (или несколько) директор и спектакли, которые являются "лицом". Мне не нужен класс для директоров, но я делаю это для выступлений, потому что у них больше информации.
Performance
@Entity
@Table(name="performance")
@XmlRootElement(name = "performace")
public class Performance implements Serializable {
@Id
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="film")
private Film film;
@Id
@Column(name="film_character")
private String character;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="actor")
private Person actor;
//TO STRING
public String toString() {
return this.actor.toString() + " - " + this.character;
}
//GETTERS
@XmlTransient
public Film getFilm() {
return this.film;
}
@XmlElementRefs({
@XmlElementRef(name = "firstName", type = Person.class),
@XmlElementRef(name = "lastName", type = Person.class)
})
public Person getActor() {
return this.actor;
}
@XmlElement(name = "character")
public String getCharacter() {
return this.character;
}
}
Когда я запускаю это через JAXB я получаю это:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<film fbId="1">
<description>Nice film</description>
<person fbId="1">
<firstName>Quentin</firstName>
<lastName>Tarantino</lastName>
</person>
<performace>
<person fbId="4">
<firstName>Steve</firstName>
<lastName>Buscemi</lastName>
</person>
<character>Billy</character>
</performace>
<performace>
<person fbId="2">
<firstName>Jhon</firstName>
<lastName>Travolta</lastName>
</person>
<character>Vincent</character>
</performace>
<performace>
<person fbId="3">
<firstName>Samuel</firstName>
<lastName>L Jackson</lastName>
</person>
<character>Jules</character>
</performace>
<performace>
<person fbId="1">
<firstName>Quentin</firstName>
<lastName>Tarantino</lastName>
</person>
<character>Jimmie</character>
</performace>
<title>Pulp Fiction</title>
</film>
Есть ли способ изменить название "лица"? Для того, чтобы получить что-то вроде этого:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<film fbId="1">
<description>Nice film</description>
<director fbId="1">
<firstName>Quentin</firstName>
<lastName>Tarantino</lastName>
</director>
<performace fbId="4">
<firstName>Steve</firstName>
<lastName>Buscemi</lastName>
<character>Billy</character>
</performace>
<performace fbId="2">
<firstName>Jhon</firstName>
<lastName>Travolta</lastName>
<character>Vincent</character>
</performace>
<performace fbId="3">
<firstName>Samuel</firstName>
<lastName>L Jackson</lastName>
<character>Jules</character>
</performace>
<performace fbId="1">
<firstName>Quentin</firstName>
<lastName>Tarantino</lastName>
<character>Jimmie</character>
</performace>
<title>Pulp Fiction</title>
</film>
Спасибо за «XmlElementRefs», я уже исправил это. Я уже исправил режиссера ... спасибо –