Bonjour,
je suis en train de développer une application web (JEE) "Gestion des banques" basé sur angularJs. c'est à dire mes fonctionnalités angulrJs assurent la manipulation de données a travers le web services RESTFull.
*code de l'entité "Compte":
lorsque je consulte un compte bancaire (en spécifiant le "code" ), il m'affiche le message d'erreur suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90 public class Compte implements Serializable{ @Id //@GeneratedValue(strategy=GenerationType.IDENTITY) private String numCompte; @Temporal(TemporalType.DATE) private Date dateCreation; private Double solde; @ManyToOne @JoinColumn(name="CODE_CLI") private Clients client; @ManyToOne @JoinColumn(name="NUM_EMP") private Employe employe; @OneToMany(mappedBy="compte", cascade=CascadeType.ALL, fetch=FetchType.LAZY) private Collection <Operation> operations; public Compte(String numCompte, Double solde, Clients cl, Employe emp) { super(); this.numCompte= numCompte; //this.operations= ops; this.dateCreation = new Date(); this.solde = solde; this.client = cl; this.employe = emp; } public Compte(){ super(); this.dateCreation = new Date(); } public String getNumCompte() { return numCompte; } public void setNumCompte(String numCompte) { this.numCompte = numCompte; } public Date getDateCreation() { return dateCreation; } public void setDateCreation(Date dateCreation) { this.dateCreation = dateCreation; } public Double getSolde() { return solde; } public void setSolde(Double solde) { this.solde = solde; } public Clients getClient() { return client; } public void setClient(Clients client) { this.client = client; } @JsonIgnore public Employe getEmploye() { return employe; } public void setEmploye(Employe employe) { this.employe = employe; } @JsonIgnore public Collection<Operation> getOperations() { return operations; } @JsonSetter public void setOperations(Collection<Operation> operations) { this.operations = operations; } }
Ce probléme indique qu'il y a un boucle récursive infini lorsque je consulte un compte:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 SyntaxError: Unexpected token t in JSON at position 143983 at JSON.parse (<anonymous>) at oc (angular.js:1066) at Yb (angular.js:8570) at angular.js:8655 at s (angular.js:323) at Yc (angular.js:8654) at c (angular.js:9380) at angular.js:13175 at l.$eval (angular.js:14388) at l.$digest (angular.js:14204)
Ce probléme proviens lorsque le compte contient un ensemble des opérations.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 2016-12-28 11:20:35.532 DEBUG 5308 --- [nio-8080-exec-4] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Written [{timestamp=Wed Dec 28 11:20:35 CET 2016, status=200, error=OK, exception=org.springframework.http.converter.HttpMessageNotWritableException, message=Could not write content: Infinite recursion (StackOverflowError) (through reference chain: com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.enti>com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]); nested exception is com.fasterxml.jackson.databind.JsonMappingException: Infinite recursion (StackOverflowError) (through reference chain: com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->>com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.>com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]), path=/banques/Comptes/CC1}] as "application/json" using [org.springframework.http.converter.json.MappingJackson2HttpMessageConverter@5d37aa0f] 2016-12-28 11:20:55.947 DEBUG 5308 --- [nio-8080-exec-4] o.s.web.servlet.DispatcherServlet : Null ModelAndView returned to DispatcherServlet with name 'dispatcherServlet': assuming HandlerAdapter completed request handling 2016-12-28 11:20:55.947 DEBUG 5308 --- [nio-8080-exec-4] o.s.web.servlet.DispatcherServlet : Successfully completed request
J'ai fais un test sur le compte donc j'ai supprimé tous les opérations du compte, alors les informations sont bien affichés, mais s'il a une ou plusieurs opérations le probléme ci-dessus sera affiché et il bloc le fonctionnement normale de l'application.
Merci de m'aider pour trouver la bonne solution,
Partager