Régression sur les adpateurs implémentant CSVLineBasedAdapter.processValues

Request description

Nous avons remarqué une regression sur les adapteurs CSV utilisant la méthode :

CSVLineBasedAdapter.processValues​(long lineNumber, java.lang.String values)

Le tableau Values semble null, alors que nous ne reproduisons pas le problème sur une version 5.3.11.

Steps to reproduce

This request concerns an up-to-date Simplicité instance
and these are the steps to reproduce it:

  1. Lancer un adapteur implémentant CSVLineBasedAdapter ainsi que la méthode processValues.
  2. Intégré une ligne java utilisant Values dans la méthode processValues.
  3. Erreur visible dans les logs.

Technical information

Instance /health
[Platform]
Status=OK
Version=5.3.13
BuiltOn=2023-09-08 13:14
Git=5.3/fca5758c61ade32f90b9f1401ebe18ec1b6d3e71
Encoding=UTF-8
EndpointIP=xxx
EndpointURL=xxx
TimeZone=Europe/Paris
SystemDate=2023-09-10 14:37:51

Bonjour,

On va essayer de reproduire.
La ligne en question est vide dans votre fichier source ?
Il suffit de tester si Value[0] est null dans votre code ?

Il y a eu il a quelque temps un fix qui retire un “;” final en trop.

Bonjour François,

Merci pour ta réponse,

Les lignes sont remplies dans notre fichier source.

Nous itérons pour utiliser le résultat de la première colonne du CSV avec le values[0].

Pour le même fichier aucun problème en 5.3.11, mais KO avec la 5.3.13.

Merci pour ces précisions, je ne reproduis pas ce comportement.

Je ne comprends pas bien pourquoi cela régresse sans avoir la ligne exacte (y compris les caractères spéciaux, \r \n… ou pas de fin de ligne) qui termine en NPE. La correction semble facile à faire dans votre code en testant le nul.

On peut remettre le “bug” qui ajoutait un “;” à chaque ligne terminant déjà par un “;”.
Je ne vois pas l’intérêt, à mon sens s’est plutôt si la ligne est non vide et ne termine pas par un “;” qu’on doit lui ajouter un “;” pour être lue par la regex du parser qui découpe le ligne sur ce séparateur (qui peut être différent).

@david une idée ?

De mémoire, la raison était que le split en tableau de la ligne ne mettait pas de chaine vide finale pour les lignes finissant par ; = il ignore le dernier;

Ex:

a;b;c; => [ "a", "b", "c" ]

et en ajoutant un ; final en plus ça fait ce qu’il faut vs le formalisme CSV :

a;b;c;; => [ "a", "b", "c", "" ]

Bonjour, voici le code et le fichier utilisé pour reproduire avec un adapteur qui “extends com.simplicite.util.integration.CSVLineBasedAdapter” :

@Override
public String processValues(long n, String[] values) {
	AppLog.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> : " + Arrays.toString(values), getGrant());
	return null;
}

}

**
test.csv (18 Bytes)
**

Voici le résultat en 5.3.13 :

2023-09-12 09:51:10,456|SIMPLICITE|INFO||http://mla-api-68d8645766-78prf:8080||INFO|p115380|com.simplicite.adapters.mla_adapter.MlaAdapterSendEventCSV|processValues||Evénement: >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> : [null]

2023-09-12 09:51:10,456|SIMPLICITE|INFO||http://mla-api-68d8645766-78prf:8080||INFO|p115380|com.simplicite.adapters.mla_adapter.MlaAdapterSendEventCSV|processValues||Evénement: >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> : [null]

Voici le résultat en 5.3.11 :

2023-09-12 10:02:43,306|SIMPLICITE|INFO||http://mla-api-8c7878c67-rrvff:8080||INFO|p115380|com.simplicite.adapters.mla_adapter.MlaAdapterSendEventCSV|processValues||Evénement: >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> : [878530172R]

2023-09-12 10:02:43,306|SIMPLICITE|INFO||http://mla-api-8c7878c67-rrvff:8080||INFO|p115380|com.simplicite.adapters.mla_adapter.MlaAdapterSendEventCSV|processValues||Evénement: >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> : [refs]

Ok donc on va remettre le dernier “;” comme avant si la regex fonctionne de cette manière.

Ce sera relivré en 5.3.14 dans la semaine.

2 Likes

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