SAXException2: Loop detected in object graph. What's the matter?

I have a web service with Java class files that were generated using NetBeans based on the database schema that I have.

Sometimes I get weird exceptions and one of them:

javax.xml.ws.WebServiceException: javax.xml.bind.MarshalException - with linked exception: [com.sun.istack.internal.SAXException2: A cycle is detected in the object graph. This will cause infinitely deep XML: org.mylib.Person[ personId=1 ] ->org.mylib.TeamPerson[ teamPersonPK=org.mylib.teamPersonPK[ teamId=1, personId=1 ] ] -> org.mylib.Person[ personId=1 ]] 

I looked for this exception and found some simillar cases, but I still can not understand the problem. I just generated these classes (Person.java, Team.java, TeamPerson.java) using NetBeans, and how can the problem come about?

This happens when I try to find all the people:

 Iterator iter = team.getTeamPersonCollection().iterator(); while(iter.hasNext()) { Person person = ((TeamPerson)iter.next()).getPerson(); ... } 

EDIT
If I remove the Team link from TeamPerson, I get the following error:

 Internal Exception: Exception [EclipseLink-7154] (Eclipse Persistence Services - 2.2.0.v20110202-r8913): org.eclipse.persistence.exceptions.ValidationException Exception Description: The attribute [teamPersonCollection] in entity class [class org.mylib.Team] has a mappedBy value of [team] which does not exist in its owning entity class [org.mylib.TeamPerson]. If the owning entity class is a @MappedSuperclass, this is invalid, and your attribute should reference the correct subclass. at org.eclipse.persistence.exceptions.PersistenceUnitLoadingException.exceptionSearchingForPersistenceResources(PersistenceUnitLoadingException.java:126) 

EDIT 2
Parts of the generated classes look like this:

Team.java

 public class Team implements Serializable { private static final long serialVersionUID = 1L; @Id @Basic(optional = false) @Column(name = "team_id") private Integer teamId; @Column(name = "type") private String type; @OneToMany(cascade = CascadeType.ALL, mappedBy = "team") private Collection<TeamPerson> teamPersonCollection; 

Person.java

 public class Person implements Serializable { private static final long serialVersionUID = 1L; @Id @Basic(optional = false) @Column(name = "person_id") private Integer personId; @Column(name = "name") private String name; @OneToMany(cascade = CascadeType.ALL, mappedBy = "person") private Collection<TeamPerson> teamPersonCollection; 

TeamPerson.java

 public class TeamPerson implements Serializable { private static final long serialVersionUID = 1L; @EmbeddedId protected TeamPersonPK teamPersonPK; @Basic(optional = false) @Column(name = "timestamp") @Temporal(TemporalType.TIMESTAMP) private Date timestamp; @JoinColumn(name = "team_id", referencedColumnName = "team_id", insertable = false, updatable = false) @ManyToOne(optional = false) private Team team; @JoinColumn(name = "person_id", referencedColumnName = "person_id", insertable = false, updatable = false) @ManyToOne(optional = false) private Person person; 

TeamPersonPK.java

 @Embeddable public class TeamPersonPK implements Serializable { @Basic(optional = false) @Column(name = "team_id") private int teamId; @Basic(optional = false) @Column(name = "person_id") private int personId; 
+6
source share
2 answers

The solution is to simply add the annotation: " @XmlTransient " ( javax.xml.bind.annotation.XmlTransient ) to the getter of the property that calls the loop.

+10
source

Perhaps this is because your Person class contains a field of type TeamPerson , and TeamPerson contains a field of type Person . And the marshaller got confused by not sorting out such an init loop?

UPD You may need to change this.

 @OneToMany(cascade = CascadeType.ALL, mappedBy = "team") private Collection<TeamPerson> teamPersonCollection; 

in

 @OneToMany(cascade = CascadeType.ALL, mappedBy = "teamId") private Collection<TeamPerson> teamPersonCollection; 

because the team field does not exist in the TeamPerson class?

0
source

Source: https://habr.com/ru/post/915640/


All Articles