La création d'un pdf et sa sauvegarde dans un champ document ne fonctionne pas si on précise les types de fichiers autorisés

Problem description

Bonjour,

Lorsque j’alimente un champ type document avec du code Java l’enregistrement ne fonctionne pas si on a précisé les types de fichiers autorisés. Le problème est présent en 5.1 mais pas en 5.2 où ça fonctionnne correctement avec le même code Java. Je ne sais pas si le fonctionnement est différent en 5.1, s’il manque du code pour que ça fonctionne.

Steps to reproduce

  1. J’ai installé le module de démo et au niveau de l’objet fournisseur j’ai ajouté un champ type document obligatoire.

  1. Pour ce champ document, j’ai créé une bibliothèque qui autorise uniquement les fichiers pdf.

  1. J’ai ajouté le code Java suivant au niveau de l’objet DemoSupplier :
package com.simplicite.objects.Demo;

import java.util.*;
import com.simplicite.util.*;
import com.simplicite.util.tools.*;

/**
 * Business object DemoSupplier
 */
public class DemoSupplier extends ObjectDB {
	private static final long serialVersionUID = 1L;
	
	@Override
	public List<String> preValidate() {
		
		if (getContext().isCreate()) {
			
			try {
			
				String docName = "test_"+Tool.getCurrentDatetime()+".pdf";
				byte[] pdf = HTMLToPDFTool.toPDF("Test création pdf");
			
				DocumentDB doc = new DocumentDB(
					ObjectField.DEFAULT_ROW_ID,
					docName,
					pdf,
					"DemoSupplier",
					"demoSupDocument",
					ObjectField.DEFAULT_ROW_ID
				);
				
				doc.setName(docName);
				doc.setMIME(HTTPTool.MIME_TYPE_PDF);
				AppLog.warning("DEBUG 1503 / preValidate / docName: " + docName, null, getGrant());
				AppLog.warning("DEBUG 1503 / preValidate / docMIME: " + doc.getMIME(), null, getGrant());
				
				String bookshelfOfFieldName = DocTool.getBookshelfOfField("demoSupDocument");
				AppLog.warning("DEBUG 1503 / preValidate / bookshelfOfFieldName: " + bookshelfOfFieldName, null, getGrant());
				AppLog.warning("DEBUG 1503 / preValidate / isPermittedMimeType: " + DocTool.getBookshelf(bookshelfOfFieldName).isPermittedMimeType(doc.getMIME()), null, getGrant());
				
				getField("demoSupDocument").setDocument(doc);
				
				
			} catch(Exception e) {
				AppLog.error("Test", e, getGrant());
			}
			
		}
		
		return super.preValidate();
	}
	
}

  1. Quand je créé un fournisseur en indiquant le code et le nom puis en cliquant sur enregistrer, le message d’erreur suivant est présent :

Dans les logs on peut voir que le fichier est bien un pdf et que la méthode isPermittedMimeType retourne true.

  1. Si je supprime la bibliothéque “demoSupDocument-B” et que je retire le code qui utilise le bookshelf (+ clear cache rouge), je n’ai plus d’erreur à la création du fournisseur et le document est bien présent dans le champ :

Technical information

Instance /health

[Platform]
Status=OK
Version=5.1.58
BuiltOn=2023-03-12 13:14
Git=5.1/064fac275713d6b031fc9ae149abf21e87a4073c
Encoding=UTF-8
EndpointIP=
EndpointURL=
TimeZone=UTC
SystemDate=2023-03-15 14:14:44

[Application]
ApplicationVersion=1.0.0
ContextPath=
ContextURL=
ActiveSessions=1
TotalUsers=7
EnabledUsers=6
LastLoginDate=2023-03-15 14:13:13

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

[OS]
Name=Linux
Architecture=amd64
Version=5.15.90.1-microsoft-standard-WSL2
DockerImageName=centos7
SystemEncoding=UTF-8

[JavaVM]
Version=17.0.6
Vendor=Eclipse Adoptium
VMName=OpenJDK 64-Bit Server VM
VMVersion=17.0.6+10
ScriptEngine=rhino
ScriptEngineVersion=Rhino 1.7.13 2020 09 02
HeapFree=318579
HeapSize=628736
HeapMaxSize=1519616
TotalFreeSize=1209459

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

[Database]
Vendor=3
ProductName=PostgreSQL
ProductVersion=13.10 (Debian 13.10-1.pgdg110+1)
DriverName=PostgreSQL JDBC Driver
DriverVersion=42.5.4
DBDate=2023-03-15 14:14:44
DBDateOffset=0
DBPatchLevel=5;P01;1aa3e07e98e9b46a7bb1f2d6d409c032
UsingBLOBs=true

[Healthcheck]
Date=2023-03-15 14:14:44
ElapsedTime=106

Bonjour,

Dans votre copie d’écran on dirait que le champ est un champ document multiple (icone +, et non pas un file input). Effectivement cette partie a beaucoup évoluée entre la 5.1 et la 5.2. La notion de bibliothèque a été généralisée aux documents simples, alors qu’avant elle ne s’appliquait qu’aux documents multiples (nouveau rendering vs existence d’une bibliothèque).

La 5.3 est en release candidate, la 5.2 en maintenance et la 5.1 en fin de vie depuis 6 mois.
On ne peut pas continuer à la maintenir ni à backporter des évolutions, retirer la bibliothèque PDF en 5.1 car ce n’est pas supporté sur les documents simples.

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.