IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Struts 2 Java Discussion :

erreur sur un append de StringBuffer dans une classe Action


Sujet :

Struts 2 Java

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2008
    Messages : 757
    Points : 572
    Points
    572
    Par défaut erreur sur un append de StringBuffer dans une classe Action
    Bonjour,

    Ce que je veux faire :
    Fabriquer un json ne comportant que deux colonnes d'une classe Produit (la colonne 'designation' et 'id').

    Au début, j'ai essayé de récupérer par hibernate seulement ces deux colonnes pour les balancer au client et struts m'aurait fait la conversion en json directement (du moins je pense cela ...) mais je n'y suis pas arrivé donc je me suis dit que ce serait bien aussi de fabriquer un json ne comportant que ces deux colonnes car j'avais déjà fait la requête de tous les objets Produits dans la méthode "repertoire" ... cela m'évite de faire un autre requête pour deux colonnes que je possède déjà dans la méthode "repertoire"...

    Cette méthode qui est appelée au chargement de la page possède les Objets Produits grâce auxquels je pourrait faire mon json ....
    Voici la classe Action avec la méthode "repertoire" :

    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
    package com.chezyen.commandes.actions;
     
    import java.util.HashMap;
    import java.util.List;
     
    import org.apache.logging.log4j.LogManager;
    import org.apache.logging.log4j.Logger;
     
    import com.chezyen.commandes.dao.IConditionnementDAO;
    import com.chezyen.commandes.dao.IProduitConditionneDAO;
    import com.chezyen.commandes.dao.IProduitDAO;
    import com.chezyen.commandes.metier.Conditionnement;
    import com.chezyen.commandes.metier.Produit;
    import com.chezyen.commandes.metier.ProduitConditionne;
    import com.opensymphony.xwork2.ActionSupport;
     
    public class ProduitsConditionnesAction extends ActionSupport{
     
    	/**
             * 
             */
    	private static final long serialVersionUID = 1L;
     
    	private static Logger log = LogManager.getLogger(ProduitsConditionnesAction.class);
     
    	private IProduitConditionneDAO produitConditionneDAO;
    	public IProduitConditionneDAO getProduitConditionneDAO() {return produitConditionneDAO;}
    	public void setProduitConditionneDAO(IProduitConditionneDAO produitConditionneDAO) {this.produitConditionneDAO = produitConditionneDAO;}
     
    	private int produitConditionneID;
    	private Produit produitConditionneProduit;
    	private Conditionnement produitConditionneConditionnement;
    	private double produitConditionnePrixProdCond;
    	private boolean produitConditionneEnCarte;
     
    	public int getProduitConditionneID() {return produitConditionneID;}
    	public void setProduitConditionneID(int produitConditionneID) {this.produitConditionneID = produitConditionneID;}
    	public Produit getProduitConditionneProduit() {return produitConditionneProduit;}
    	public void setProduitConditionneProduit(Produit produitConditionneProduit) {this.produitConditionneProduit = produitConditionneProduit;}
    	public Conditionnement getProduitConditionneConditionnement() {return produitConditionneConditionnement;}
    	public void setProduitConditionneConditionnement(Conditionnement produitConditionneConditionnement) {this.produitConditionneConditionnement = produitConditionneConditionnement;}
    	public double getProduitConditionnePrixProdCond() {return produitConditionnePrixProdCond;}
    	public void setProduitConditionnePrixProdCond(double produitConditionnePrixProdCond) {this.produitConditionnePrixProdCond = produitConditionnePrixProdCond;}
    	public boolean isProduitConditionneEnCarte() {return produitConditionneEnCarte;}
    	public void setProduitConditionneEnCarte(boolean produitConditionneEnCarte) {this.produitConditionneEnCarte = produitConditionneEnCarte;}
     
    	private ProduitConditionne produitConditionne;
    	public ProduitConditionne getProduitConditionne() {return produitConditionne;}
     
    	private List<ProduitConditionne> produitsConditionnes;
    	public List<ProduitConditionne> getProduitsConditionnes() {return produitsConditionnes;}
     
    	private StringBuffer sbListProduits;
    	public StringBuffer getSbListProduits() {return sbListProduits;}
     
    	public String repertoire() {
    		log.info("ProduitsConditionnesAction - repertoire");
    		this.produitsConditionnes = produitConditionneDAO.findAll();
     
    		sbListProduits.append("[");
     
    		for (ProduitConditionne pc : this.produitsConditionnes) {
    			log.info("desi : " + pc.getProduit().getDesignation() + " id : " + pc.getProduit().getIdProduit());
    			sbListProduits.append("{designation:'");
    			sbListProduits.append(pc.getProduit().getDesignation());
    			sbListProduits.append("', id:");
    			sbListProduits.append(pc.getProduit().getIdProduit());
    			sbListProduits.append("},");
    		}
    		sbListProduits.append("];");
     
    		log.info("liste produits : " + sbListProduits);
    		return SUCCESS;
    	}
    }
    mais survient l'erreur suivante :

    Je rencontre une erreur lorsque j'essaie de faire un append dans un stringBuffer à l'intérieur d'une méthode d'une classe Action.
    Dans le navigateur, donc côté client, je reçoit l'erreur suivante qui indique un nullPointerException que je ne comprends pas étant donné que j'ai instancié mon Stringbuffer ...
    Ce message indique la ligne 62 qui correspond à la ligne 60 de la classe Action détaillée ci-dessus :
    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
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    <html>
    <head>
        <title>Struts Problem Report</title>
    </head>
    <body>
        <h2>Struts Problem Report</h2>
        <p>
        Struts has detected an unhandled exception:
        </p>
    <div id="exception-info">
    <table>
        <tr>
            <td><strong>Messages</strong>:</td>
            <td>
            </td>
        </tr>
        <tr>
            <td><strong>File</strong>:</td>
            <td>com/chezyen/commandes/actions/ProduitsConditionnesAction.java</td>
        </tr>
        <tr>
            <td><strong>Line number</strong>:</td>
            <td>62</td>
        </tr>
     
    </table>
    </div>
     
     
    <div id="stacktraces">
    <hr />
    <h3>Stacktraces</h3>
    <div class="stacktrace" style="padding-left: 0em">
        <strong>java.lang.NullPointerException</strong>
        <div>
        <pre>
        com.chezyen.commandes.actions.ProduitsConditionnesAction.repertoire(ProduitsConditionnesAction.java:62)
        sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        java.lang.reflect.Method.invoke(Method.java:606)
        ognl.OgnlRuntime.invokeMethod(OgnlRuntime.java:870)
        ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1293)
        ognl.ObjectMethodAccessor.callMethod(ObjectMethodAccessor.java:68)
        com.opensymphony.xwork2.ognl.accessor.XWorkMethodAccessor.callMethodWithDebugInfo(XWorkMethodAccessor.java:117)
        com.opensymphony.xwork2.ognl.accessor.XWorkMethodAccessor.callMethod(XWorkMethodAccessor.java:108)
        ognl.OgnlRuntime.callMethod(OgnlRuntime.java:1369)
        ognl.ASTMethod.getValueBody(ASTMethod.java:90)
        ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)
        ognl.SimpleNode.getValue(SimpleNode.java:258)
        ognl.Ognl.getValue(Ognl.java:494)
        ognl.Ognl.getValue(Ognl.java:458)
        com.opensymphony.xwork2.ognl.OgnlUtil$2.execute(OgnlUtil.java:309)
        com.opensymphony.xwork2.ognl.OgnlUtil.compileAndExecute(OgnlUtil.java:340)
        com.opensymphony.xwork2.ognl.OgnlUtil.getValue(OgnlUtil.java:307)
        com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:423)
        com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:287)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:250)
        org.apache.struts2.interceptor.DeprecationInterceptor.intercept(DeprecationInterceptor.java:41)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)
        org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:256)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)
        com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:167)
        com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)
        com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265)
        org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:76)
        com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)
        com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)
        com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:229)
        com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)
        com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:229)
        com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)
        com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:191)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)
        org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:73)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)
        org.apache.struts2.interceptor.DateTextFieldInterceptor.intercept(DateTextFieldInterceptor.java:125)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)
        org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:91)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)
        org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:253)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)
        com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)
        com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)
        com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)
        com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171)
        com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)
        com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:139)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)
        org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)
        com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:193)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)
        com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:189)
        com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)
        org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54)
        org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:564)
        org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:81)
        org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99)
        org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
        org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
        org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:178)
        org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
        org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
        org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
        org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
        org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
        org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
        org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
        org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
        org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
        org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
        org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528)
        org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1099)
        org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:670)
        org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520)
        org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476)
        java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        java.lang.Thread.run(Thread.java:745)
        </pre>
        </div>
    </div>
    </div>
     
    <div class="footer">
    <hr />
    <p>
    You are seeing this page because development mode is enabled.  Development mode, or devMode, enables extra
    debugging behaviors and reports to assist developers.  To disable this mode, set:
    <pre>
      struts.devMode=false
    </pre>
    in your <code>WEB-INF/classes/struts.properties</code> file.
    </p>
    </div>
    </body>
    </html>
    et dans la console d'Eclipse, je reçoit ceci :
    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
    2016-08-05 00:22:18,421 INFO  [http-nio-8080-exec-5] actions.IndexAction (IndexAction.java:14) - Appel de index
    2016-08-05 00:22:18,678 INFO  [http-nio-8080-exec-7] actions.ProduitsConditionnesAction (ProduitsConditionnesAction.java:57) - ProduitsConditionnesAction - repertoire
    2016-08-05 00:22:18,688 INFO  [http-nio-8080-exec-7] dao.GenericDAO (GenericDAO.java:32) - GenericDAO : findAll - from ProduitConditionne
    Hibernate: select produitcon0_.idProduitConditionne as idProdui1_6_, produitcon0_.idConditionnement as idCondit4_6_, produitcon0_.enCarte as enCarte2_6_, produitcon0_.prixProdCond as prixProd3_6_, produitcon0_.idProduit as idProdui5_6_ from ProduitConditionne produitcon0_
    Hibernate: select conditionn0_.idConditionnement as idCondit1_2_0_, conditionn0_.designation as designat2_2_0_, conditionn0_.quantite as quantite3_2_0_ from Conditionnement conditionn0_ where conditionn0_.idConditionnement=?
    Hibernate: select produit0_.idProduit as idProdui1_5_0_, produit0_.designation as designat2_5_0_, produit0_.prix as prix3_5_0_, produit0_.stock as stock4_5_0_ from Produit produit0_ where produit0_.idProduit=?
    Hibernate: select conditionn0_.idConditionnement as idCondit1_2_0_, conditionn0_.designation as designat2_2_0_, conditionn0_.quantite as quantite3_2_0_ from Conditionnement conditionn0_ where conditionn0_.idConditionnement=?
    Hibernate: select produit0_.idProduit as idProdui1_5_0_, produit0_.designation as designat2_5_0_, produit0_.prix as prix3_5_0_, produit0_.stock as stock4_5_0_ from Produit produit0_ where produit0_.idProduit=?
    2016-08-05 00:22:38,042 INFO  [http-nio-8080-exec-9] actions.IndexAction (IndexAction.java:14) - Appel de index
    2016-08-05 00:22:38,845 INFO  [http-nio-8080-exec-8] actions.ProduitsConditionnesAction (ProduitsConditionnesAction.java:57) - ProduitsConditionnesAction - repertoire
    2016-08-05 00:22:38,847 INFO  [http-nio-8080-exec-8] dao.GenericDAO (GenericDAO.java:32) - GenericDAO : findAll - from ProduitConditionne
    Hibernate: select produitcon0_.idProduitConditionne as idProdui1_6_, produitcon0_.idConditionnement as idCondit4_6_, produitcon0_.enCarte as enCarte2_6_, produitcon0_.prixProdCond as prixProd3_6_, produitcon0_.idProduit as idProdui5_6_ from ProduitConditionne produitcon0_
    Hibernate: select conditionn0_.idConditionnement as idCondit1_2_0_, conditionn0_.designation as designat2_2_0_, conditionn0_.quantite as quantite3_2_0_ from Conditionnement conditionn0_ where conditionn0_.idConditionnement=?
    Hibernate: select produit0_.idProduit as idProdui1_5_0_, produit0_.designation as designat2_5_0_, produit0_.prix as prix3_5_0_, produit0_.stock as stock4_5_0_ from Produit produit0_ where produit0_.idProduit=?
    Hibernate: select conditionn0_.idConditionnement as idCondit1_2_0_, conditionn0_.designation as designat2_2_0_, conditionn0_.quantite as quantite3_2_0_ from Conditionnement conditionn0_ where conditionn0_.idConditionnement=?
    Hibernate: select produit0_.idProduit as idProdui1_5_0_, produit0_.designation as designat2_5_0_, produit0_.prix as prix3_5_0_, produit0_.stock as stock4_5_0_ from Produit produit0_ where produit0_.idProduit=?
    Cela fait plusieurs fois que j'essaie de fabriquer mon JSON d'une manière ou d'une autre mais je n'y arrive pas.

    Quelqu'un saurait-il m'aider s'il vous plaît ?

    merci !
    OS : LinuxMint 20

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2008
    Messages : 757
    Points : 572
    Points
    572
    Par défaut
    Bon en fait j'avais oublié le new Stringbuffer ... désolé de cette erreur idiote ... j'ai géré le StringBuffer comme une simple String ... par manque d'habitude !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	private StringBuffer sbListProduits = new StringBuffer();
    OS : LinuxMint 20

  3. #3
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,
    Citation Envoyé par francky74 Voir le message
    étant donné que j'ai instancié mon Stringbuffer ...
    Je ne vois pas où dans ta classe il y aurait une instanciation du StringBuffer (on ne trouve nulle part new StringBuffer(). Par ailleurs, ton système avec StringBuffer stateful posera un problème lors du second appel de repertoire : il faudrait faire un reset de son contenu (setLength(0)) avant de réécrire dedans.
    Je veux bien accepter le StringBuffer recyclé par économie, mais attention à l'accès multi-thread : si ton service est possiblement accèder de manière concurrent, tu vas avoir un mélange des différents JSon ! Un pool de StringBuilder pourrait faire le même genre de choses, mais sans risque de conflit en accès concurrent. Et voir si c'est bien utile vu le temps de construction et la mémoire dont tu as besoin pour chaque JSon.
    Sinon, pourquoi n'utilises-tu pas simplement une bibliothèque JSon pour produire le JSon ? Un SimpleJson ou org.json si le nombre d'élément est faible, ou Jackson en streaming dans le cas contraire.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2008
    Messages : 757
    Points : 572
    Points
    572
    Par défaut
    Bonjour Joel,

    Grand merci pour votre réponse bien argumentée !

    un problème lors du second appel de repertoire : il faudrait faire un reset de son contenu (setLength(0)) avant de réécrire dedans.
    Je n'y avait pas pensé ! c'est vrai qu'un simple rafraîchissement de la page multiplierait les lignes dans le json construit avec un StringBuffer !!!

    Jackson en streaming dans le cas contraire.
    Je ne connais pas Jackson et c'est un bon prétexte pour mettre le nez dedans !

    Par contre, si je l'utilise, l'utiliserais-je dans la méthode "repertoire" avec les classes Produits que j'ai déjà récupérées ?
    OS : LinuxMint 20

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par francky74 Voir le message
    Par contre, si je l'utilise, l'utiliserais-je dans la méthode "repertoire" avec les classes Produits que j'ai déjà récupéré ?
    En streaming en tout cas, oui. Les méthodes sont très similaires à du StringBuffer/StringBuilder : au lieu de faire sb.append("\"name\": \""); sb.append(value); sb.append("\"");, tu vas faire generator.writeStringField( "name", value); par exemple, ou generator.writeStartArray() au lieu de sb.append("[");. Cela simplifie en plus la gestion des séparateurs (les virgules par exemple, entre les items de tableau), car tu n'as même pas besoin de t'en préoccuper.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2008
    Messages : 757
    Points : 572
    Points
    572
    Par défaut
    Ok merci !

    Je vais faire des recherches dans ce sens

    OS : LinuxMint 20

  7. #7
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2008
    Messages : 757
    Points : 572
    Points
    572
    Par défaut
    Jackson en streaming
    Quel serait, s'il vous plaît, l'avantage de préparer un json en streaming plutôt qu'en dataBinding ?
    Le préparer en streaming me ferait créer un fichier et utiliser plus de mémoire ? sans compter le temps d'accès au fichier ?

    Merci,
    OS : LinuxMint 20

  8. #8
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Non, pas besoin de fichier. Tu peux streaming directement dans un flux réseau (je stream perso directement dans un JspWriter). L'avantage du streaming par rapport aux autres systèmes (avec ou sans binding), c'est la conso mémoire. Pour de gros JSon, c'est mieux. Ou si tu fais des services avec de nombreuses connexions simultanées. Le binding c'est bien pour ne plus avoir à se soucier du JSon et manipuler des objets métiers directement.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. erreur déclaration d'un attribut ifstream dans une classe
    Par tiresias54 dans le forum Débuter
    Réponses: 5
    Dernier message: 10/03/2015, 12h49
  2. Récupérer un paramètre de requête dans une class Action
    Par cherif ahmed dans le forum Struts 1
    Réponses: 0
    Dernier message: 08/02/2014, 16h57
  3. Récupérer le pageContext dans une classe Action
    Par Narvis dans le forum Struts 1
    Réponses: 2
    Dernier message: 20/12/2010, 15h55
  4. Réponses: 10
    Dernier message: 24/09/2009, 18h49
  5. [Thread] Erreur dans une classe interne
    Par totof2308 dans le forum Général Java
    Réponses: 5
    Dernier message: 03/06/2004, 08h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo