2013-07-10 4 views
5

का कारण बन जाएगा मुझे यह त्रुटि मिली है, क्या कोई मेरी मदद कर सकता है?यह असीमित गहरे एक्सएमएल

javax.xml.ws.WebServiceException: javax.xml.bind.MarshalException - जुड़ा हुआ अपवाद के साथ: [com.sun.istack.internal.SAXException2: एक चक्र वस्तु ग्राफ में पता चला है। इससे असीमित गहराई एक्सएमएल: [email protected] -> [email protected] -> [email protected]] com.sun.xml.internal पर होगा com.sun.xml.internal.ws.encoding पर .ws.message.jaxb.JAXBMessage.writePayloadTo (अज्ञात स्रोत) com.sun.xml.internal.ws.message.AbstractMessageImpl.writeTo (अज्ञात स्रोत) पर com.sun.xml.internal.ws.transport.http.HttpAdapter.encodePacket पर .StreamSOAPCodec.encode (अज्ञात स्रोत) com.sun.xml.internal.ws.encoding.SOAPBindingCodec.encode (अज्ञात स्रोत) पर (अज्ञात स्रोत) com.sun.xml.internal.ws.transport.http.HttpAdapter.acce पर एसएस $ 100 (अज्ञात स्रोत) com.sun.xml.internal.ws.transport.http.HttpAdapter $ HttpToolkit.handle (अज्ञात स्रोत) com.sun.xml.internal.ws.transport.http.HttpAdapter पर .handle (अज्ञात स्रोत) com.sun.xml.internal.ws.transport.http.server.WSHttpHandler.handleExchange (अज्ञात स्रोत) com.sun.xml.internal.ws.transport.http.server पर .WSHttpHandler.handle (अज्ञात स्रोत) com.sun.net.httpserver.Filter $ Chain.doFilter (अज्ञात स्रोत) sun.net.httpserver.AuthFilter.doFilter (अज्ञात स्रोत) com.sun.net पर। 0ersun.net.httpserver.ServerImpl $ एक्सचेंज $ LinkHandler.handle ($ अज्ञात स्रोत) com.sun.net.httpserver.Filter $ Chain.doFilter (अज्ञात स्रोत) sun.net.httpserver.ServerImpl $ Exchange.run (अज्ञात स्रोत) java.util.concurrent पर .hreadPoolExecutor.runWorker (अज्ञात स्रोत) java.util.concurrent.hreadPoolExecutor $ Worker.run (अज्ञात स्रोत) java.lang.hread.run (अज्ञात स्रोत) द्वारा: javax.xml.bind.MarshalException - लिंक अपवाद के साथ : [com.sun.istack.internal.SAXException2: ऑब्जेक्ट ग्राफ़ में एक चक्र का पता लगाया गया है। इससे असीमित गहराई एक्सएमएल: [email protected] -> [email protected] -> [email protected]] com.sun.xml.internal पर होगा .bind.v2.runtime.MarshallerImpl.write (अज्ञात स्रोत) com.sun.xml.internal.bind.v2.runtime.BridgeImpl.marshal (अज्ञात स्रोत) com.sun.xml.internal.bind पर। api.Bridge.marshal (अज्ञात स्रोत) ... 1 9 और इसके कारण: com.sun.istack.internal.SAXException2: ऑब्जेक्ट ग्राफ़ में एक चक्र का पता चला है। इससे असीमित गहरे एक्सएमएल का कारण बन जाएगा: [email protected] -> [email protected] -> [email protected] com.sun.xml.internal पर। bind.v2.runtime.XMLSerializer.reportError com.sun.xml.internal.bind.v2.runtime.XMLSerializer.pushObject (अज्ञात स्रोत) com.sun.xml.internal.bind पर पर (अज्ञात स्रोत)। v2.runtime.XMLSerializer.childAsXsiType com.sun.xml.internal.bind.v2.runtime.property.SingleElementNodeProperty.serializeBody (अज्ञात स्रोत) com.sun.xml.internal.bind पर पर (अज्ञात स्रोत)। v2.runtime.ClassBeanInfoImpl.serializeBody (अज्ञात स्रोत) com.sun.xml पर। internal.bind.v2.runtime.XMLSerializer।childAsXsiType com.sun.xml.internal.bind.v2.runtime.property.ArrayElementNodeProperty.serializeItem (अज्ञात स्रोत) com.sun.xml.internal.bind.v2.runtime.property पर पर (अज्ञात स्रोत)। ArrayElementProperty.serializeListBody com.sun.xml.internal.bind.v2.runtime.property.ArrayERProperty.serializeBody (अज्ञात स्रोत) com.sun.xml.internal.bind.v2.runtime पर पर (अज्ञात स्रोत)। ClassBeanInfoImpl.serializeBody (अज्ञात स्रोत) com.sun.xml.internal.bind.v2.runtime.property पर com.sun.xml.internal.bind.v2.runtime.XMLSerializer.childAsXsiType (अज्ञात स्रोत) में। ArrayElementNodeProperty.serializeItem (अज्ञात com.sun.xml.internal.bind.v2.runtime.property.ArrayElementProperty.serializeListBody (अज्ञात स्रोत) com.sun.xml.internal.bind.v2.runtime.property.ArrayERProperty.serializeBody पर परस्रोत) com.sun.xml.internal.bind.v2.runtime.ClassBeanInfoImpl.serializeBody (अज्ञात स्रोत) com.sun.xml.internal.bind.v2.runtime.XMLSerializer.childAsXsiType पर पर (अज्ञात स्रोत) (अज्ञात स्रोत) ... 22 अधिक

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; 
    } 

क्लाइंट मुख्य वर्ग

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"); 
    } 
+0

मेरी टिप्पणी को अनदेखा करें। यह एक जेएक्सबी त्रुटि है, हाइबरनेट नहीं। ऐसा लगता है कि '@ एक्सएमएल ट्रांसिएंट' लात मार रहा है ... – acdcjunior

+0

http://stackoverflow.com/questions/3073364/jaxb-mapping-cyclic-references-to-xml एक्सएमएल में कई से अधिक रिश्ते मैपिंग का कारण बन सकता है अनंत एक्सएमएल पीढ़ी लूप क्योंकि कई से कई एक-दूसरे को आगे और आगे इंगित कर सकते हैं। –

+0

मैं इसे कैसे हल करूं? उस लिंक का समाधान काम नहीं करता है, मैंने XmlInransient एनोटेशन को XmlInverse द्वारा प्रतिस्थापित करने का प्रयास किया ... लेकिन यह काम नहीं करता है ... कृपया कोई सुझाव दें? – Gentuzos

उत्तर

4

डिफ़ॉल्ट रूप से एक JAXB impl सार्वजनिक गुण व्यवहार करेगा (मिल/सेट) मैप किए गए विधि जोड़े। यदि आप फ़ील्ड को एनोटेट करना चाहते हैं तो आपको अपनी कक्षा में @XmlAccessorType(XmlAccessType.FIELD) डालना होगा।

आप अपने JAXB (JSR-222) प्रदाता के रूप में EclipseLink JAXB (MOXY) का उपयोग कर रहे हैं, तो (मैं MOXY) तो आप @XmlInverseReference एक्सटेंशन का उपयोग कर सकते हैं सीसा।

+0

असल में, मुझे समझ में नहीं आया। मैं मोक्सी का उपयोग नहीं करता। क्या आप मुझे और बता सकते हैं कि मैं इस समस्या को कैसे ठीक करूं? – Gentuzos

+0

@Gentuzos - क्या आपने अपनी कक्षा में '@XmlAccessorType (XmlAccessType.FIELD) 'जोड़ने या फ़ील्ड से' @ XmlTransient' को विधि प्राप्त करने का प्रयास किया था? –

+0

जब मैं पहली एनोटेशन और XmlTransient को कॉम्टे क्लास के लिए केवल सूची में जोड़ता हूं, तो मुझे "javax.xml.ws.soap.SOAPFaultException: java.lang.NullPointerException" को अपवाद के रूप में मिला। और जब मैं कंप्रेसर क्लास पर XmlTransient जोड़ता हूं, गेटर्स से पहले और अन्य XmlTransient और XmlAccessorType एनोटेशन को हटा देता हूं तो मुझे एक ही त्रुटि मिलती है। पीएस: मैंने वेब पोस्ट और क्लाइंट मुख्य वर्ग डालने के बाद ही अपनी पोस्ट अपडेट की है। – Gentuzos

1

वर्ग mappedBy विकल्प (संबंध के व्युत्क्रम की ओर) का उपयोग करता है की विधि प्राप्त करने के लिए @XmlTransient ले जाएँ।

+0

क्या आप इसका एक उदाहरण जोड़ सकते हैं – user18896654353

संबंधित मुद्दे