Service error lors de l'accès par le menu à un objet héritier d'un objet avec modèle d'état

Bonjour,
lors de l’accès par le menu à un objet B héritant de A, si A a un champ énuméré avec modèle d’état, alors le menu d’accès à B (par état) ne fonctionne plus (service error dans la log système).
Pour contourner le problème, j’ai dû désactiver l’accès direct par menu sur chaque état du champ énuméré.
L’accès à l’objet B est restauré suite à cette modification.
-> il semble que l’accès direct par menu ne fonctionne plus dans le cas d’un héritage.

Edit: le problème semble plus étendu… même après avoir désactivé l’accès direct par menu, l’accès à l’objet via un lien du modèle (sélection de référence) ne fonctionne pas (même erreur service error).

2020-02-04 14:11:57,411 WARN [com.simplicite.webapp.servlets.ui.JSONServlet] SIMPLICITE|http://43e7b7fbb7c3:8080||WARN|system|com.simplicite.webapp.servlets.ui.JSONServlet|service||Event: Service error
    java.lang.NullPointerException
2020-02-04 14:11:57,402 INFO [com.simplicite.util.ScriptInterpreter] SIMPLICITE|http://43e7b7fbb7c3:8080||INFO|a068181|com.simplicite.util.ScriptInterpreter|BCSIPerson/ref_ajax_BCSIPerson||Evénement: [IN BCSIPerson.initRefSelect] this.getSearchSpec=
1=1
Version=4.0.P24
BuiltOn=2020-01-30 19:40 (revision fc83dfcc581fa3014c92d5c27de8f8128116a6e9)

Bonjour Bruno,

Je ne reproduis pas le problème sur un héritage d’objet en V4/P24 (“User” par exemple, sans code ajouté).

Il doit y avoir du code ou une search-spec qui plante dans votre objet métier ou son parent, si le “search” ne fonctionne pas, ni en menu (qui force juste un filtre sur statut) ni en ref picker (qui fait un simple search suite à un initRefSelect).

Il faut surement debugger votre code au niveau des hooks initList / pre/postSearch de A ou de B.

Bonsoir François,

merci beaucoup pour ton retour.

J’ai réinitialisé tout le code de l’objet héritier (j’ai même supprimé le fichier source).
Le problème persiste alors qu’il n’y a plus aucun filtre ni searchspec ou autre code (plus de code d’objet, aucun code partagé). Je vais lancer un nouveau build et redéployer pour voir.

Bruno

Idem après un redéploiement complet.

J’ai activé en passant les traceHooks / traceObject (tout à true).

L’erreur se produit aussi bien en cliquant sur la loupe que sur la flèche pour accéder à l’objet référencé (celui qui hérite de User en l’occurrence).

Voici les logs générées lorsque je clique sur la flèche:

2020-02-04 21:26:57,593 WARN [com.simplicite.webapp.servlets.ui.JSONServlet] SIMPLICITE|http://23481b29a643:8080||WARN|system|com.simplicite.webapp.servlets.ui.JSONServlet|service||Event: Service error
    java.lang.NullPointerException
     at com.simplicite.util.Action.getDisplay(Action.java:307)
     at com.simplicite.util.tools.JSONTool.actionToJson(JSONTool.java:1972)
     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:678)
     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:367)
     at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
     at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:860)
     at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1598)
     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)
2020-02-04 21:26:57,593 INFO [com.simplicite.util.ScriptInterpreter] SIMPLICITE|http://23481b29a643:8080||ICORESC001|a068181|com.simplicite.util.ScriptInterpreter|BCSIPerson/the_ajax_BCSIPerson||Information script: t=-:--:--.--- | ----|> isActionEnable(null, "refreshUserHelper")
    arg0: null
    arg1: java.lang.String: "refreshUserHelper"
2020-02-04 21:26:57,593 INFO [com.simplicite.util.ScriptInterpreter] SIMPLICITE|http://23481b29a643:8080||ICORESC001|a068181|com.simplicite.util.ScriptInterpreter|BCSIPerson/the_ajax_BCSIPerson||Information script: t=-:--:--.--- | ----|> isActionEnable(null, "refreshUser")
    arg0: null
    arg1: java.lang.String: "refreshUser"
2020-02-04 21:26:57,593 INFO [com.simplicite.util.ScriptInterpreter] SIMPLICITE|http://23481b29a643:8080||ICORESC001|a068181|com.simplicite.util.ScriptInterpreter|BCSIPerson/the_ajax_BCSIPerson||Information script: t=-:--:--.--- | ----|> isActionEnable(null, "refreshUsersActionCron")
    arg0: null
    arg1: java.lang.String: "refreshUsersActionCron"
2020-02-04 21:26:57,593 INFO [com.simplicite.util.ScriptInterpreter] SIMPLICITE|http://23481b29a643:8080||ICORESC001|a068181|com.simplicite.util.ScriptInterpreter|BCSIPerson/the_ajax_BCSIPerson||Information script: t=-:--:--.--- | ----|> isActionEnable(null, "delall")
    arg0: null
    arg1: java.lang.String: "delall"
2020-02-04 21:26:57,592 INFO [com.simplicite.util.ScriptInterpreter] SIMPLICITE|http://23481b29a643:8080||ICORESC001|a068181|com.simplicite.util.ScriptInterpreter|BCSIPerson/the_ajax_BCSIPerson||Information script: t=-:--:--.--- | ----|> isActionEnable(null, "merge")
    arg0: null
    arg1: java.lang.String: "merge"
2020-02-04 21:26:57,592 INFO [com.simplicite.util.ScriptInterpreter] SIMPLICITE|http://23481b29a643:8080||ICORESC001|a068181|com.simplicite.util.ScriptInterpreter|BCSIPerson/the_ajax_BCSIPerson||Information script: t=-:--:--.--- | ----|> isActionEnable(null, "updall")
    arg0: null
    arg1: java.lang.String: "updall"
2020-02-04 21:26:57,592 INFO [com.simplicite.util.ScriptInterpreter] SIMPLICITE|http://23481b29a643:8080||ICORESC001|a068181|com.simplicite.util.ScriptInterpreter|BCSIPerson/the_ajax_BCSIPerson||Information script: t=-:--:--.--- | ----|> isActionEnable(null, "export")
    arg0: null
    arg1: java.lang.String: "export"
2020-02-04 21:26:57,592 INFO [com.simplicite.util.ScriptInterpreter] SIMPLICITE|http://23481b29a643:8080||ICORESC001|a068181|com.simplicite.util.ScriptInterpreter|BCSIPerson/the_ajax_BCSIPerson||Information script: t=-:--:--.--- | ----|> isActionEnable(null, "exportxml")
    arg0: null
    arg1: java.lang.String: "exportxml"
2020-02-04 21:26:57,592 INFO [com.simplicite.util.ScriptInterpreter] SIMPLICITE|http://23481b29a643:8080||ICORESC001|a068181|com.simplicite.util.ScriptInterpreter|BCSIPerson/the_ajax_BCSIPerson||Information script: t=-:--:--.--- | ----|> isActionEnable(null, "prefs")
    arg0: null
    arg1: java.lang.String: "prefs"
2020-02-04 21:26:57,592 INFO [com.simplicite.util.ScriptInterpreter] SIMPLICITE|http://23481b29a643:8080||ICORESC001|a068181|com.simplicite.util.ScriptInterpreter|BCSIPerson/the_ajax_BCSIPerson||Information script: t=-:--:--.--- | ----|> isActionEnable(null, "reload")
    arg0: null
    arg1: java.lang.String: "reload"
2020-02-04 21:26:57,588 INFO [com.simplicite.util.ScriptInterpreter] SIMPLICITE|http://23481b29a643:8080||ICORESC001|a068181|com.simplicite.util.ScriptInterpreter|BCSIPerson/the_ajax_BCSIPerson||Information script: t=-:--:--.--- | ----|> isStateTransitionEnable("1", "3")
    arg0: java.lang.String: "1"
    arg1: java.lang.String: "3"
2020-02-04 21:26:57,588 INFO [com.simplicite.util.ScriptInterpreter] SIMPLICITE|http://23481b29a643:8080||ICORESC001|a068181|com.simplicite.util.ScriptInterpreter|BCSIPerson/the_ajax_BCSIPerson||Information script: t=-:--:--.--- | ----|> isStateTransitionEnable("1", "0")
    arg0: java.lang.String: "1"
    arg1: java.lang.String: "0"
2020-02-04 21:26:57,576 INFO [com.simplicite.util.ScriptInterpreter] SIMPLICITE|http://23481b29a643:8080||ICORESC001|a068181|com.simplicite.util.ScriptInterpreter|BCSIPerson/the_ajax_BCSIPerson||Information script: t=-:--:--.--- | ----|> isCreateEnable()
2020-02-04 21:26:57,576 INFO [com.simplicite.util.ScriptInterpreter] SIMPLICITE|http://23481b29a643:8080||ICORESC001|a068181|com.simplicite.util.ScriptInterpreter|BCSIPerson/the_ajax_BCSIPerson||Information script: t=-:--:--.--- | ----|> getHelp(null)
    arg0: null

Merci

java.lang.NullPointerException
at com.simplicite.util.Action.getDisplay(Action.java:307)

D’après tes logs, les métadata de l’objet ne se chargent pas correctement car il manque un display (traduction dans la langue de l’utilisateur sur une Action). C’est un warning, donc possible que ce soit passant (en prenant une autre traduction ou en affichant le nom de l’action et pas sa traduction…).

  • Vérifie les traductions des actions spécifiques dans toutes les langues utilisées.

  • Attention les actions n’héritent pas (car liées aux droits qui n’héritent pas sur un objet), il faut bien recréer des Fonctions d’accès (CRUD + view + action) au niveau de l’objet fils. Sinon j’imagine qu’un isActionEnable hérité fasse un null dans le fils qui n’a pas l’action si la condition est pas assez robuste pour tester le cas null.

Le code scripté en Rhino devient obsolessant depuis le retour de Java. Mais si tu dis qu’il n’y a plus rien dans le code, on devrait voir des erreurs de l’interpréteur en cas d’erreur 500 dans un catch général.

Bonjour François,

merci beaucoup pour ton aide. C’était bien ça (une action sans traduction).
J’ai reconfiguré l’ensemble (accès direct par menu, et codes divers) et tout fonctionne bien.

Bruno