I got this error, can someone help me please?
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: tn.bh.jpa.Compte@1144c75 -> tn.bh.jpa.Mouvement_Compte@1f4eccd -> tn.bh.jpa.Compte@1144c75] at com.sun.xml.internal.ws.message.jaxb.JAXBMessage.writePayloadTo(Unknown Source) at com.sun.xml.internal.ws.message.AbstractMessageImpl.writeTo(Unknown Source) at com.sun.xml.internal.ws.encoding.StreamSOAPCodec.encode(Unknown Source) at com.sun.xml.internal.ws.encoding.SOAPBindingCodec.encode(Unknown Source) at com.sun.xml.internal.ws.transport.http.HttpAdapter.encodePacket(Unknown Source) at com.sun.xml.internal.ws.transport.http.HttpAdapter.access$100(Unknown Source) at com.sun.xml.internal.ws.transport.http.HttpAdapter$HttpToolkit.handle(Unknown Source) at com.sun.xml.internal.ws.transport.http.HttpAdapter.handle(Unknown Source) at com.sun.xml.internal.ws.transport.http.server.WSHttpHandler.handleExchange(Unknown Source) at com.sun.xml.internal.ws.transport.http.server.WSHttpHandler.handle(Unknown Source) at com.sun.net.httpserver.Filter$Chain.doFilter(Unknown Source) at sun.net.httpserver.AuthFilter.doFilter(Unknown Source) at com.sun.net.httpserver.Filter$Chain.doFilter(Unknown Source) at sun.net.httpserver.ServerImpl$Exchange$LinkHandler.handle(Unknown Source) at com.sun.net.httpserver.Filter$Chain.doFilter(Unknown Source) at sun.net.httpserver.ServerImpl$Exchange.run(Unknown Source) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source) Caused by: 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: tn.bh.jpa.Compte@1144c75 -> tn.bh.jpa.Mouvement_Compte@1f4eccd -> tn.bh.jpa.Compte@1144c75] at com.sun.xml.internal.bind.v2.runtime.MarshallerImpl.write(Unknown Source) at com.sun.xml.internal.bind.v2.runtime.BridgeImpl.marshal(Unknown Source) at com.sun.xml.internal.bind.api.Bridge.marshal(Unknown Source) ... 19 more Caused by: com.sun.istack.internal.SAXException2: A cycle is detected in the object graph. This will cause infinitely deep XML: tn.bh.jpa.Compte@1144c75 -> tn.bh.jpa.Mouvement_Compte@1f4eccd -> tn.bh.jpa.Compte@1144c75 at com.sun.xml.internal.bind.v2.runtime.XMLSerializer.reportError(Unknown Source) at com.sun.xml.internal.bind.v2.runtime.XMLSerializer.pushObject(Unknown Source) at com.sun.xml.internal.bind.v2.runtime.XMLSerializer.childAsXsiType(Unknown Source) at com.sun.xml.internal.bind.v2.runtime.property.SingleElementNodeProperty.serializeBody(Unknown Source) at com.sun.xml.internal.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(Unknown Source) at com.sun.xml.internal.bind.v2.runtime.XMLSerializer.childAsXsiType(Unknown Source) at com.sun.xml.internal.bind.v2.runtime.property.ArrayElementNodeProperty.serializeItem(Unknown Source) at com.sun.xml.internal.bind.v2.runtime.property.ArrayElementProperty.serializeListBody(Unknown Source) at com.sun.xml.internal.bind.v2.runtime.property.ArrayERProperty.serializeBody(Unknown Source) at com.sun.xml.internal.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(Unknown Source) at com.sun.xml.internal.bind.v2.runtime.XMLSerializer.childAsXsiType(Unknown Source) at com.sun.xml.internal.bind.v2.runtime.property.ArrayElementNodeProperty.serializeItem(Unknown Source) at com.sun.xml.internal.bind.v2.runtime.property.ArrayElementProperty.serializeListBody(Unknown Source) at com.sun.xml.internal.bind.v2.runtime.property.ArrayERProperty.serializeBody(Unknown Source) at com.sun.xml.internal.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(Unknown Source) at com.sun.xml.internal.bind.v2.runtime.XMLSerializer.childAsXsiType(Unknown Source) ... 22 more
tn.bh.jpa.Compte
@Entity
@Table(name="compte")
public class Compte {
@Id
@Column(name="compte_rib")
private Integer rib;
@ManyToOne(cascade={CascadeType.PERSIST, CascadeType.MERGE})
@JoinColumn(name="compte_utilisateurIdentifiant")
@XmlTransient
private User user;
@Column(name="compte_libelle")
private String libelle;
@OneToMany(mappedBy="compte")
private List<Solde> soldeList;
@Column(name="compte_dateCreation", nullable=false)
private String dateCréation;
@Column(name="compte_dateMaj", nullable=false)
private String dateMaj;
@Column(name="compte_typeDevise", nullable=false)
private Integer typeDevise;
@Column(name="compte_situationCompte", nullable=false)
private Integer situationCompte;
@OneToMany(fetch = FetchType.EAGER, mappedBy="compte2")
@XmlTransient
private List<Mouvement_Compte> mvtList;
@ManyToMany(cascade = {CascadeType.ALL},
mappedBy = "comptes",
targetEntity = Virement.class)
private List<Virement> virementList;
public Compte(){}
public Compte(Integer rib, String libelle, String dateCréation, String dateMaj,
Integer typeDevise, Integer situationCompte) {
this.rib = rib;
this.libelle = libelle;
this.dateCréation = dateCréation;
this.dateMaj = dateMaj;
this.typeDevise = typeDevise;
this.situationCompte = situationCompte;
}
public boolean equals(Compte c){
boolean returnValue = true;
if ((!this.rib.equals(c.getRib()))
|| (!this.dateCréation.equals(c.getDateCréation()))
|| (!this.dateMaj.equals(c.getDateMaj()))
|| (!this.typeDevise.equals(c.getTypeDevise()))
|| (!this.situationCompte.equals(c.getSituationCompte())))
returnValue = false;
return returnValue;
}
public String toString(Compte c){
return "[Rib] : " + c.getRib() + " [Libelle] : " + c.getLibelle() + " [String création] : " +
c.getDateCréation() + " [String mise-à-jour] : " + c.getDateMaj() + " [Type devise] : " +
c.getTypeDevise() + " [Situation compte] : " + c.getSituationCompte();
}
public Integer getRib() {
return rib;
}
public void setRib(Integer rib) {
this.rib = rib;
}
public String getLibelle() {
return libelle;
}
public void setLibelle(String libelle) {
this.libelle = libelle;
}
public String getDateCréation() {
return dateCréation;
}
public void setDateCréation(String dateCréation) {
this.dateCréation = dateCréation;
}
public String getDateMaj() {
return dateMaj;
}
public void setDateMaj(String dateMaj) {
this.dateMaj = dateMaj;
}
public Integer getTypeDevise() {
return typeDevise;
}
public void setTypeDevise(Integer typeDevise) {
this.typeDevise = typeDevise;
}
public Integer getSituationCompte() {
return situationCompte;
}
public void setSituationCompte(Integer situationCompte) {
this.situationCompte = situationCompte;
}
public List<Solde> getSoldeList() {
return soldeList;
}
public void setSoldeList(List<Solde> soldeList) {
this.soldeList = soldeList;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public List<Mouvement_Compte> getMvtList() {
return mvtList;
}
public void setMvtList(List<Mouvement_Compte> mvtList) {
this.mvtList = mvtList;
}
public List<Virement> getVirementList() {
return virementList;
}
public void setVirementList(List<Virement> virementList) {
this.virementList = virementList;
}
}
tn.bh.jpa.Mouvement_compte
@Entity
@Table(name="mouvement_compte")
public class Mouvement_Compte {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="mouvement_compte_id")
private Integer id;
@ManyToOne(cascade={CascadeType.PERSIST, CascadeType.MERGE})
@JoinColumn(name="mouvement_compte_compteRib")
@XmlTransient
private Compte compte2;
@Column(name="mouvement_compte_cod_op", nullable=false)
private String cod_op;
@Column(name="mouvement_compte_dat_mvt", nullable=false)
private String dat_mvt;
@Column(name="mouvement_compte_mnt_mvt", nullable=false)
private Double mnt_mvt;
@Column(name="mouvement_compte_sens_mvt", nullable=false)
private char sens_mvt;
@Column(name="mouvement_compte_dat_journee", nullable=false)
private String dat_journee;
public Mouvement_Compte(){}
public Mouvement_Compte(String cod_op, String dat_mvt,
Double mnt_mvt, char sens_mvt, String dat_journee) {
this.cod_op = cod_op;
this.dat_mvt = dat_mvt;
this.mnt_mvt = mnt_mvt;
this.sens_mvt = sens_mvt;
this.dat_journee = dat_journee;
}
public boolean equals(Mouvement_Compte m){
boolean returnValue = true;
if ((!this.id.equals(m.getId()))
|| (!this.cod_op.equals(m.getCod_op()))
|| (!this.dat_mvt.equals(m.getDat_mvt()))
|| (!this.mnt_mvt.equals(m.getMnt_mvt()))
|| ((this.sens_mvt != m.getSens_mvt()))
|| (!this.dat_journee.equals(m.getDat_journee())))
returnValue = false;
return returnValue;
}
public String toString(Mouvement_Compte m){
return "[Id] : " + m.getCod_op() + " [Code opération] : " + m.getCod_op() +
" [Date] : " + m.getDat_mvt() + " [Montant] : " + m.getMnt_mvt() +
" [Sens] : " + m.getSens_mvt() + " [String journée] : " + m.getDat_journee();
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getCod_op() {
return cod_op;
}
public void setCod_op(String cod_op) {
this.cod_op = cod_op;
}
public String getDat_mvt() {
return dat_mvt;
}
public void setDat_mvt(String dat_mvt) {
this.dat_mvt = dat_mvt;
}
public Double getMnt_mvt() {
return mnt_mvt;
}
public void setMnt_mvt(Double mnt_mvt) {
this.mnt_mvt = mnt_mvt;
}
public char getSens_mvt() {
return sens_mvt;
}
public void setSens_mvt(char sens_mvt) {
this.sens_mvt = sens_mvt;
}
public String getDat_journee() {
return dat_journee;
}
public void setDat_journee(String dat_journee) {
this.dat_journee = dat_journee;
}
public Compte getCompte() {
return compte2;
}
public void setCompte(Compte compte) {
this.compte2 = compte;
}
}
WebMethod
@WebMethod
public List<Compte> consulterListeCpt(String id){
List<Compte> objects = null;
try {
s = HibernateUtils.getSession();
Transaction tx = s.beginTransaction();
Query query = s.createQuery("from Compte where compte_utilisateuridentifiant = :y");
query.setString("y", id);
objects = query.list();
tx.commit();
} catch (HibernateException e) {
System.out.println(e.getMessage());
} finally {
s.close();
}
for (Compte c: objects)
System.out.println("[rib] = " + c.getRib() + "\t" +
"[title] = " + c.getLibelle() + "\t" +
"[dateC] = " + c.getDateCréation() + "\t");
return objects;
}
Client main class
public class Client {
public static void main(String[] args){
ServiceService service = new ServiceService();
tn.bh.services.client.Service srvc = service.getServicePort();
List<Compte> response = srvc.consulterListeCpt("id");
}
By default a JAXB impl will treat public properties (get/set) method pairs as mapped. If you want to annotate the field you need to put @XmlAccessorType( XmlAccessType.FIELD)
on your class.
If you are using EclipseLink JAXB (MOXy) as your JAXB (JSR-222) provider (I'm the MOXy) lead then you can use the @XmlInverseReference
extension.
Move the @XmlTransient to the get method of the class that uses the mappedBy option (the inverse side of the relation).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With