web services - porque - Esto causarĂ¡ XML infinitamente profundo
no consumir lacteos adelgaza? (2)
Por defecto, un JAXB impl tratará pares de métodos de propiedades públicas (get / set) como mapeados. Si desea anotar el campo, debe poner @XmlAccessorType( XmlAccessType.FIELD)
en su clase.
Si usa EclipseLink JAXB (MOXy) como su proveedor JAXB (JSR-222) (soy el MOXy), puede usar la extensión @XmlInverseReference
.
Recibí este error, ¿alguien puede ayudarme, por favor?
javax.xml.ws.WebServiceException: javax.xml.bind.MarshalException - con excepción vinculada: [com.sun.istack.internal.SAXException2: Se detecta un ciclo en el gráfico de objetos. Esto causará un XML infinitamente profundo: 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 (Fuente desconocida) en com.sun.xml.internal.ws.message.AbstractMessageImpl.writeTo (Fuente desconocida) en com.sun.xml.internal.ws.encoding.StreamSOAPCodec.encode (Fuente desconocida ) en com.sun.xml.internal.ws.encoding.SOAPBindingCodec.encode (origen desconocido) en com.sun.xml.internal.ws.transport.http.HttpAdapter.encodePacket (origen desconocido) en com.sun.xml. internal.ws.transport.http.HttpAdapter.access $ 100 (origen desconocido) en com.sun.xml.internal.ws.transport.http.HttpAdapter $ HttpToolkit.handle (origen desconocido) en com.sun.xml.internal.ws .transport.http.HttpAdapter.handle (Fuente desconocida) en com.sun.xml.internal.ws.transport.http.server.WSHttpHandler.handleExchange (Fuente desconocida) en com.sun.xml.internal.ws.transport.http .server.WSHttpHandler.handle (Fuente desconocida) en com.sun.net.httpserver.Filter $ Chain.doFilter ( Fuente Desconocida) en sun.net.httpserver.AuthFilter.doFilter (Fuente Desconocida) en com.sun.net.httpserver.Filter $ Chain.doFilter (Fuente Desconocida) en sun.net.httpserver.ServerImpl $ Exchange $ LinkHandler.handle ( Fuente Desconocida) en com.sun.net.httpserver.Filter $ Chain.doFilter (Fuente Desconocida) en sun.net.httpserver.ServerImpl $ Exchange.run (Fuente Desconocida) en java.util.concurrent.ThreadPoolExecutor.runWorker (Fuente Desconocida ) en java.util.concurrent.ThreadPoolExecutor $ Worker.run (Fuente desconocida) en java.lang.Thread.run (Fuente desconocida) Causado por: javax.xml.bind.MarshalException - con excepción vinculada: [com.sun.istack .internal.SAXException2: Se detecta un ciclo en el gráfico de objetos. Esto causará XML infinitamente profundo: 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 (Fuente desconocida) en com.sun.xml.internal.bind.v2.runtime.BridgeImpl.marshal (Fuente desconocida) en com.sun.xml.internal.bind.api.Bridge.marshal ( Fuente desconocida) ... 19 más Causado por: com.sun.istack.internal.SAXException2: Se detecta un ciclo en el gráfico de objetos. Esto causará XML infinitamente profundo: tn.bh.jpa.Compte@1144c75 -> tn.bh.jpa.Mouvement_Compte@1f4eccd -> tn.bh.jpa.Compte@1144c75 en com.sun.xml.internal.bind.v2 .runtime.XMLSerializer.reportError (origen desconocido) en com.sun.xml.internal.bind.v2.runtime.XMLSerializer.pushObject (origen desconocido) en com.sun.xml.internal.bind.v2.runtime.XMLSerializer.childAsXsiType (Fuente desconocida) en com.sun.xml.internal.bind.v2.runtime.property.SingleElementNodeProperty.serializeBody (Fuente desconocida) en com.sun.xml.internal.bind.v2.runtime.ClassBeanInfoImpl.serializeBody (Fuente desconocida) en com.sun.xml.internal.bind.v2.runtime.XMLSerializer.childAsXsiType (origen desconocido) en com.sun.xml.internal.bind.v2.runtime.property.ArrayElementNodeProperty.serializeItem (origen desconocido) en com.sun .xml.internal.bind.v2.runtime.property.ArrayElementProperty.serializeListBody (origen desconocido) en com.sun.xml.internal.bind.v2.runtime.property.ArrayERProperty.serializeBody (origen desconocido) en com.sun.xml .internal.bind.v2.runtime.Cla ssBeanInfoImpl.serializeBody (origen desconocido) en com.sun.xml.internal.bind.v2.runtime.XMLSerializer.childAsXsiType (origen desconocido) en com.sun.xml.internal.bind.v2.runtime.property.ArrayElementNodeProperty.serializeItem ( Origen desconocido) en com.sun.xml.internal.bind.v2.runtime.property.ArrayElementProperty.serializeListBody (origen desconocido) en com.sun.xml.internal.bind.v2.runtime.property.ArrayERProperty.serializeBody (origen desconocido ) en com.sun.xml.internal.bind.v2.runtime.ClassBeanInfoImpl.serializeBody (origen desconocido) en com.sun.xml.internal.bind.v2.runtime.XMLSerializer.childAsXsiType (origen desconocido) ... 22 más
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;
}
Clase principal del cliente
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");
}
Mueva el @XmlTransient al método get de la clase que usa la opción mappedBy (el lado inverso de la relación).