Service error lors de l'affichage d'une liste

Bonjour,

je migre en V4 l’application Karta développée en simplicité v3.
La liste des projets s’affiche très bien. (objet CrbKartaProjet).
quand je sélectionne un projet pour afficher le détail, pas de pb non plus.

Par contre, quand je reviens à la liste, j’ai de façon aléatoire ce message, la liste des projets est vide, je dois me déconnecter pour qu’elle s’affiche à nouveau :

2020-04-07 14:15:48,660 WARN [com.simplicite.webapp.servlets.ui.JSONServlet] SIMPLICITE|https://dev-sim:10513/karta|/karta|WARN|system|com.simplicite.webapp.servlets.ui.JSONServlet|service||Evénement: Service error
    java.lang.NullPointerException
     at com.simplicite.util.tools.JSONTool.actionToJson(JSONTool.java:1926)
     at com.simplicite.util.tools.JSONTool.objectMetaDataToJson(JSONTool.java:1270)
     at com.simplicite.util.tools.JSONTool.metadata(JSONTool.java:2333)
     at com.simplicite.util.tools.JSONTool.metadata(JSONTool.java:2328)
     at com.simplicite.webapp.ObjectJson.metadata(ObjectJson.java:80)
     at com.simplicite.webapp.tools.JSONServletTool.businessObjectService(JSONServletTool.java:532)
     at com.simplicite.webapp.servlets.AbstractJSONServlet.service(AbstractJSONServlet.java:68)
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
     at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
     at com.simplicite.webapp.filters.RewriteFilter.doFilter(RewriteFilter.java:77)
     at com.simplicite.webapp.filters.AbstractFilter.doFilter(AbstractFilter.java:37)
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
     at com.simplicite.webapp.filters.AuthMethodFilter.doFilter(AuthMethodFilter.java:133)
     at com.simplicite.webapp.filters.AbstractFilter.doFilter(AbstractFilter.java:37)
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
     at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
     at com.simplicite.tomcat.valves.APISessionValve.invoke(APISessionValve.java:187)
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
     at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:688)
     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
     at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373)
     at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
     at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
     at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1594)
     at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
     at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
     at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
     at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
     at java.base/java.lang.Thread.run(Thread.java:834)

Il faudrait le paramétrage des actions de cet objet, il doit y avoir un truc quelquepart qui pose pb au JSONTool

Le code de cette ligne qui tombe en NPE :

label = obj.getPrintTemplate(pt).getDisplay();

Votre objet a-t-il un print template en liste ?
A voir s’il fonctionne quand la liste s’affiche, et pourquoi il disparaît après ouverture du formulaire.

oui, j’ai 4 print template en liste
je vais investiguer sur cette piste

j’ai réécrit mon code en JAVA.
et j’ai toujours des messages de service error :
2020-05-13 12:35:15,563 WARN [com.simplicite.webapp.servlets.ui.JSONServlet] SIMPLICITE|https://dev-sim:10513/karta|/karta|WARN|system|com.simplicite.webapp.servlets.ui.JSONServlet|service||Evénement: Service error
java.lang.NullPointerException
at com.simplicite.util.tools.JSONTool.actionToJson(JSONTool.java:1931)
at com.simplicite.util.tools.JSONTool.objectMetaDataToJson(JSONTool.java:1273)
at com.simplicite.util.tools.JSONTool.metadata(JSONTool.java:2338)
at com.simplicite.util.tools.JSONTool.metadata(JSONTool.java:2333)
at com.simplicite.webapp.ObjectJson.metadata(ObjectJson.java:80)
at com.simplicite.webapp.tools.JSONServletTool.businessObjectService(JSONServletTool.java:535)
at com.simplicite.webapp.servlets.AbstractJSONServlet.service(AbstractJSONServlet.java:68)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at com.simplicite.webapp.filters.RewriteFilter.doFilter(RewriteFilter.java:77)
at com.simplicite.webapp.filters.AbstractFilter.doFilter(AbstractFilter.java:37)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at com.simplicite.webapp.filters.AuthMethodFilter.doFilter(AuthMethodFilter.java:136)
at com.simplicite.webapp.filters.AbstractFilter.doFilter(AbstractFilter.java:37)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
at com.simplicite.tomcat.valves.APISessionValve.invoke(APISessionValve.java:187)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.base/java.lang.Thread.run(Thread.java:834)

comment investiguer sur ces erreurs ?

Le NPE se passe niveau socle sur cette ligne de code:

label = obj.getPrintTemplate(pt).getDisplay();

Comme obj ne peut pas être nul ici c’est donc forcément getPrintTemplate(pt) qui est nul.

Or ce pt est extrait du nom d’une action standard qui se nomme print_<pt>.

La seule explication que je vois c’est donc que vous avez une action qui s’appelle print_* et dont le * ne correspond pas à un nom de publication de votre objet.

je n’ai pas d’action qui se nomme print_<>
la seul action print est celle là et ne dépend pas de mon module

OK ça élimine cette piste.
Y a-t-il une subtilité particulière dans votre paramétrage/code (héritage, getTargetObject, …) ?

j’utilise des remote object. pas de gettarget

Je n’ai pas compris la réponse

pas d’héritage, pas de getTargetObject.

Oui ça j’avais compris, ce que j’ai pas compris c’est “j’utilise des remote object”

je récupère des données d’une autre application
c’est la seul spécificité des cette appli par rapport aux autres

Vous êtes forcément dans un cas particulier car on ne voit vraiment pas comment cette erreur pourrait se produire.

On essaie donc juste de comprendre ce cas particulier pour essayer de reproduire le pb.

Essayez donc de nous aider un peu plus ce cas particulier en nous indiquant précisément tout ce qui rend cet objet particulier au niveau de son paramétrage ou de son code.

En attendant on va rajouter un try/catch sur cette partie du code pour trapper ce NPE qui ne devrait pas se produire, ça donnera peut être des pistes.

Bonjour,

Il faudrait nous donner le paramétrage de ces 4 PrintTemplate (simple export XML) pour voir s’il y a un problème de chargement des metadata dans un contexte de liste.

je ré-écrit Karta qui était jusqu’ici en simplicité 3

l’objet CrbKartaProjet est gros … 111 attributs
des export PDF et EXCEL
bcp de code métier

c’est l’affichage de cet objet qui plante

je vais essayer de commenter mon code pour savoir quel hook est impliqué mais ça va être long …

j’ai aussi ce message parfois :
2020-05-13 12:06:25,452 WARN [com.simplicite.webapp.servlets.ui.JSONServlet] SIMPLICITE|https://Rec-sim:10283/karta|/karta|WARN|system|com.simplicite.webapp.servlets.ui.JSONServlet|service||Evénement: Service error
java.lang.NullPointerException
at com.simplicite.util.ObjectDB.search(ObjectDB.java:733)
at com.simplicite.util.tools.JSONTool.list(JSONTool.java:2594)
at com.simplicite.webapp.tools.JSONServletTool.search(JSONServletTool.java:710)
at com.simplicite.webapp.ObjectJson.search(ObjectJson.java:219)
at com.simplicite.webapp.ObjectJson.search(ObjectJson.java:195)
at com.simplicite.webapp.tools.JSONServletTool.businessObjectService(JSONServletTool.java:540)
at com.simplicite.webapp.servlets.AbstractJSONServlet.service(AbstractJSONServlet.java:68)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at com.simplicite.webapp.filters.RewriteFilter.doFilter(RewriteFilter.java:77)
at com.simplicite.webapp.filters.AbstractFilter.doFilter(AbstractFilter.java:37)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at com.simplicite.webapp.filters.AuthMethodFilter.doFilter(AuthMethodFilter.java:136)
at com.simplicite.webapp.filters.AbstractFilter.doFilter(AbstractFilter.java:37)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
at com.simplicite.tomcat.valves.APISessionValve.invoke(APISessionValve.java:187)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.base/java.lang.Thread.run(Thread.java:830)

Le try/catch permettra de retourner des metadata sans l’action qui est en défaut, ce qui ne bloquera plus l’affichage du formulaire ou de la liste. Mais ne corrigera pas le fait que l’action Print ait disparue…

Je vois un problème de robustesse en cas d’appel à setPrintTemplateVisibility(false) via hook. Est-ce que vous utilisez cette méthode ?

Dans ce cas, le getPrintTemplate peut retourner null ce qui expliquerait le NPE.

non, je n’utilise pas de setPrintTemplateVisibility