Erreur lors d'une désactivation de compte Utilisateur

Bonjour,
Nous rencontrons une erreur “étrange” lorsqu’on cherche à suspendre une licence d’utilisateur :

2022-02-15 17:47:02,684|SIMPLICITE|ERROR||http://siparex-simplicite-dev-745fcf686c-b58k5:8080||ECORED0001|designer|com.simplicite.webapp.ObjectDocument|displayFile||Erreur File from input stream
java.lang.NullPointerException: Cannot invoke “java.io.InputStream.read(byte)” because “in” is null
at com.simplicite.webapp.tools.ServletTool.writeStream(ServletTool.java:2698)
at com.simplicite.webapp.ObjectDocument.displayFile(ObjectDocument.java:337)

Pouvez-vous nous aider, s’il vous plait ?

[Platform]
Status=OK
Version=5.1.29
BuiltOn=2022-02-11 19:20
Git=release/771ad074cf3bf293da3a66e81b5b92cee875d00d
Encoding=UTF-8
EndpointIP=10.201.117.53
EndpointURL=http://siparex-simplicite-dev-745fcf686c-b58k5:8080
TimeZone=Europe/Paris
SystemDate=2022-02-15 17:51:44

Merci,
Ophélie

Pouvez vous préciser ce que vous voulez dire exactement par “suspendre une licence d’utilisateur” ?

Je ne constate pas de pb particulier quand on active et désactive un utilisateur sur une 5.1.29

Exactement, lorsque j’appuie sur bouton “suspendre” sur la page d’un utilisateur :

Je ne constate pas de pb quand je fais ça sur une 5.1.29 “out of the box”

Pouvez vous nous fournir le stacktrace complet de l’erreur ? Sans cela on ne peut pas situer précisément le cas d’erreur.

Et/ou nous indiquer plus d’informations contextuelles sur votre cas d’usage (avec quel user êtes vous connecté ? sur quel scope ? etc.), à noter que, souvent, une copie d’écran complete nous permet de mieux cerner ce contexte contrairement à un bout de copie d’écran.

De manière générale plus vous nous fournissez d’informations plus on est à même de cerner votre cas d’usage et, si possible, de le reproduire.

Merci

Voici le stacktrace de l’erreur :

Je suis connecté avec designer avec le scope “administrateur simplicité”

Sur l’objet User standard le seul attribut “document” (au sens large = document ou image) c’est la photo du user, peut être que le document photo de ce user est corrompu d’une manière ou d’une autre.

Essayez d’uploader manuellement une image dans la photo, enregistrez, et regardez si vous avez toujours cette erreur.

S’il n’y a plus l’erreur il faudra essayer de comprendre l’origine de la “corruption” de la photo (ex: avez vous une synchro auto depuis un IdP ? si oui l’attribut picture du userinfo contient elle quelque chose d’exploitable ? etc.)

NB: La console “Network” du navigateur permettrait de cerner plus précisément les attributs d’appel au service “document” en question, sans cela je ne peux pas être sûr qu’on parle bien de la photo du user

PS : J’ai testé avec un user avec un photo je n’ai pas non plus de pb (et sur un user non customisé c’est bien le seul appel au service “document”)

Bonjour,

J’ai essayé d’uploader manuellement une photo et d’enregistrer. J’ai ensuite essayé d’activer le compte (ou de le suspendre), et j’ai toujours la même l’erreur.

Voici la console “Network”:


Il y a 3 documents qui n’ont absolument rien.

Votre copie d’écran indique à priori que le pb concerne bien la photo du user. Mais je ne vois pas de raison qu’il y ait 3 appels au service “document” sur l’affichage du formulaire…

Pouvez vous refaire un test d’affichage du formulaire d’un user avec une photo uploadée manuellement et nous fournir l’export HAR correspondant de la console network (merci de mettre uniquement les traces correspondant à cet affichage du formulaire = supprimer les traces précédentes avant de faire la manip)

PS: Merci aussi de nous fournir le health check complet de votre instance.

En refaisant la manip, le document dans la console network fonctionne comme votre capture d’écran :


Cependant, j’ai toujours l’erreur quand je tente de suspendre ou activer un utilisateur.

Voici l’export HAR correspondant à la console network :
simplicite-siparex-dev.datailor.fr.har (2.4 MB).

PS : Je ne sais pas comment vous fournir un health check complet

Au cas où cette erreur peut également aider à réparer le problème :

Je veux dire un copie/coller texte complet de la page /health

Avez vous l’erreur quand vous enregistrez le user (sans changer le statut) ?

1 Like

Merci pour la copie d’écran de la console console du navigateur mais ce n’est qu’une une remontée partielle des logs serveur via websocket, donc le stacktrace fourni précédemment donne plus d’infos.

1 Like

Voilà le health check complet
health.txt (1.4 KB)

Pour répondre à votre question, non, je n’ai pas d’erreur quand j’enregistre (sans changer le statut).

OK merci pour le health check complet ça va me permettre de monter un environnement de test le plus iso possible avec le votre.

L’objectif est, comme pour toute sollicitation de ce type, d’essayer de reproduire l’erreur que vous décrivez, ce que je n’ai pas réussi à faire jusqu’ici.

Par exemple, avec les infos fournies jusqu’ici je ne pouvais pas savoir que votre base de données était du PostgreSQL.

C’est pour cela qu’on vous demande de fournir le maximum d’informations tout de suite pour pouvoir reproduire le pb dans un environnement similaire au votre et avec un mode opératoire identique.

1 Like

Bon test fait sur une image Docker 5.1.29 et sur un PostgreSQL 11.x (chez moi c’est un 11.15 pas un 11.14 comme chez vous mais ça ne doit pas changer grand chose):


[Platform]
Status=OK
Version=5.1.29
BuiltOn=2022-02-11 19:20
Git=release/771ad074cf3bf293da3a66e81b5b92cee875d00d
Encoding=UTF-8
EndpointIP=172.26.0.3
EndpointURL=http://d00f534e2c76:8080
TimeZone=UTC
SystemDate=2022-02-16 11:47:05

[Application]
ApplicationVersion=1.0.0
ContextPath=
ContextURL=https://sandbox.simplicite.io
ActiveSessions=1
TotalUsers=4
EnabledUsers=3
LastLoginDate=2022-02-16 11:44:36

[Server]
ServerInfo=Apache Tomcat/9.0.58
ServerType=WEB
ServerActiveSessions=1

[OS]
Name=Linux
Architecture=amd64
Version=4.18.0-358.el8.x86_64
DockerImageName=centos7
SystemEncoding=UTF-8

[Disk]
DiskFree=14976
DiskUsable=14976
DiskTotal=51188

[JavaVM]
Version=17.0.2
Vendor=Eclipse Adoptium
VMName=OpenJDK 64-Bit Server VM
VMVersion=17.0.2+8
ScriptEngine=rhino
ScriptEngineVersion=Rhino 1.7.13 2020 09 02
HeapFree=253594
HeapSize=485376
HeapMaxSize=1687552
TotalFreeSize=1455770

[Cache]
GrantCache=0
GrantCacheMax=0
GrantCacheRatio=0
ObjectCache=221
ObjectCacheMax=10000
ObjectCacheRatio=2
ProcessCache=1
ProcessCacheMax=10000
ProcessCacheRatio=0

[Database]
Vendor=3
ProductName=PostgreSQL
ProductVersion=11.15 (Debian 11.15-1.pgdg90+1)
DriverName=PostgreSQL JDBC Driver
DriverVersion=42.3.3
DBDate=2022-02-16 11:47:05
DBDateOffset=0
DBPatchLevel=5;P01;4c6bd437ccc70a2e93d30f52b0903b35
UsingBLOBs=true

[Healthcheck]
Date=2022-02-16 11:47:06
ElapsedTime=245

J’ai créé un user avec une photo (par acquis de conscience j’ai essayé avec un PNG et un JPG) et sans photo, je n’ai jamais l’erreur que vous indiquez lorsque j’active et je désactive ce user.

@Francois une idée car je suis sec ?

Le User doit avoir physiquement dans le champ une image absente du dbdoc.
On ne voit rien sur la UI, mais il doit tenter de l’afficher avec un lien mort.

Il faudrait voir en base :

  • ce que contient la colonne usr_image_id de ce user
  • et si ça existe dans la table m_document s’il y a un fichier sur ce champ et ce user

Un changement d’état UI reste un appel Ajax d’update avec un nouveau statut, donc ça devrait aussi se produire sur un Save simple en sélectionnant un autre statut ou champ.

Mais bon jamais un GET affichage d’image KO ne bloque un call POST d’update.
Pouvez vous nous donner les données du call de cet update ?

Est ce l’objet User natif ou un héritier avec des choses en plus ?
ou avez vous modifié des choses dans l’objet User directement (ajout de champs, modif du template…) ?

De mon point de vue les logs n’ont rien à voir avec le pb de transition (droit, quota ou autre).

Cf. les infos obtenues plus haut:

  1. le pb se produit visiblement y compris quand ils uploadent manuellement une nouvelle photo
  2. le pb ne se produit visiblement pas au save simple mais uniquement lors des changements de statut

C’est ces deux choses qui me laissent perplexe…

Si j’ai bien compris le pb n’empêche pas les transitions d’état ça génère juste des erreurs dans les logs (merci de confirmer).

NB: Ils sont en 5.1 à jour sur PostgreSQL en mode BLOB.

Les appels de la copie d’écran sont triés par ordre alphabétique donc inexploitables pour identifier le GET qui plante avec ses paramètres et à quel moment précis. Ils vous donneront les infos (comme le doc id et le row_id du record) qu’il faudra aller investiguer par ailleurs.

Donc surement un fichier manquant dans m_document où la colonne du BLOB (input stream) est null.

Là rien ne dit pas quel fichier est manquant, si ça se trouve c’est autre chose, une icone, un logo.
On voit aussi une requête sur un treeview sans nom, étrange : “app?action=treeview&name=”

Si c’est un pb d’upload, quand on enregistre une image, il faut regarder la taille disque, ou la config des BLOB de la base.

Je viens de faire plusieurs tests et l’erreur n’apparaît pas systématiquement quand je clique sur l’action suspendre ou activer. Cependant, que l’erreur apparaisse ou non, je ne peux pas suspendre ou activer un utilisateur.
Donc il est possible que le problème ne vienne pas de l’erreur mais d’autre part.

Si le problème vient effectivement d’autre part, je m’occuperai de l’erreur “InputStream” plus tard. Pouvoir activer et désactiver les utilisateurs est plus important que régler l’erreur.

Avez-vous une idée ?