このエラーが発生しています
The server encountered an internal error (javax.xml.bind.MarshalException - with linked
exception: [com.sun.istack.SAXException2: A cycle is detected in the object graph. This
will cause infinitely deep XML: com.app.Vote@16cc0f7 ->
com.app.ComplicatedVote@1a961d2 -> com.app.Vote@16cc0f7]) that
prevented it from fulfilling this request.
これらは2つのクラスです(少なくとも重要な部分)
ComplicatedVote.java
@XmlRootElement(name="complicated-vote")
@Entity
@Table(name="complicated_votes")
public class ComplicatedVote implements Serializable{
private static final long serialVersionUID = 1L;
@XmlElement(required=true)
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="id", nullable=false)
private int id;
@XmlElement(required=true)
@Column(name="name", nullable=false)
private String name;
@XmlTransient
@OneToMany(cascade = {CascadeType.ALL}, targetEntity=Vote.class, fetch=FetchType.EAGER)
@JoinTable(
name="PARENT_CHILD",
joinColumns = @JoinColumn( name="PARENT_ID"),
inverseJoinColumns = @JoinColumn( name="CHILD_ID")
)
private List<Vote> children = new ArrayList<Vote>();
投票.java
@XmlRootElement(name="vote")
@Entity
@Table(name="votes")
public class Vote implements Serializable {
private static final long serialVersionUID = 1L;
@XmlElement(required=true)
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="id", nullable=false)
private int id;
@XmlElement(required=true)
@Column(name="name", nullable=false)
private String name;
@XmlElement(required=true)
@Column(name="max", nullable=false)
private int max;
@XmlElement(required=true)
@Column(name="current", nullable=false)
private int current;
@XmlElement(required=true)
@Column(name="is_simple", nullable=false)
private int isSimple;
@XmlTransient
@ManyToOne (cascade = {CascadeType.ALL}, targetEntity=ComplicatedVote.class, fetch=FetchType.EAGER)
private ComplicatedVote parent;
@XmlElement(required=true)
@Transient
private int votedOn;
@XmlTransient
@ManyToMany(cascade = {CascadeType.ALL}, targetEntity=User.class, fetch=FetchType.EAGER)
@JoinTable(name = "USER_VOTES",
joinColumns = {@JoinColumn(name = "VOTE_ID")},
inverseJoinColumns = {@JoinColumn(name = "USER_ID")}
)
private Set<User> voters = new HashSet<User>();
これをJax-RSで使用しています。したがって、問題はxmlに変換しようとしたときにのみ発生します。ロジック自体はすべて機能しています。問題は、技術的にロジックが間違っていないため、その例外を発生させない方法がわからないことです。または多分そうです。なぜこれが行われるのか、それを回避する方法について誰かが光を当てることができることを願っています. 私は を使用しているので@XmlTransient
、マーシャリングすべきではないので、このエラーは発生しないはずです。これらのタイプの関係に使用する必要がある別の注釈はありますか?