Changement du statut d'un adapteur non fonctionnel

Bonjour

je développe un adapteur (code ci-dessous) qui traite un fichier JSON. Si le fichier fourni est malformé, je souhaiterai que l’import soit marqué en “Chargé en erreur”.

public class RCM_BCSIAppScope extends SimpleJSONAdapter {
	private static final long serialVersionUID = 1L;

	@Override
	public String process(JSONTokener t) throws JSONException {
		JSONArray jsonArray = null;
		Object jsonContent = t.nextValue();
		if (JSONArray.class.getSimpleName().equals(jsonContent.getClass().getSimpleName())) {
			jsonArray = (JSONArray) jsonContent;
			// je fais mon traitement
			return monXMLSImplicite;
		} else {
			this.getErrorWriter().println("The given file is wrongly formatted.");
			setStatus('L');
			throw new JSONException("The given file is wrongly formatted.");
		}
	}
}

Alors que mon adapteur retourne une exception et logge une erreur, l’import est marqué en “Traité sans erreur.” J’ai ensuite tenté de forcer le statut à ‘L’, aucun impact.
D’ailleurs est-ce normal que si j’utilise le getErrorWriter mais que je ne jette pas d’exception, mes logs d’erreur ne sont plus tracés ?

Au passage, est-il possible que vous publier la javadoc de votre classe XMLSupervisor afin que je puisse avoir les valeurs de XMLSupervisor.STATUS_*.

Merci d’avance

[Platform]
Status=OK
Version=4.0.P24
BuiltOn=2020-09-30 12:05 (revision 5a820e8be619728c3675ce2fc5d5beee3afe294a)
Encoding=UTF-8
EndpointIP=21.0.9.2
EndpointURL=http://383e0a627747:8080
TimeZone=Europe/Paris
SystemDate=2020-10-19 12:28:32

Votre code n’est peut être pas appelé et il doit planter avant et sortir en exception. Mettez un try/catch dans votre block process + des AppLog.info pour debugger ligne à ligne.

Effectivement, en V5 les constantes ont été déplacées dans une classe public.

/** Supervisor status: load error */
public static final char SUPERVISOR_STATUS_LOAD_ERROR = 'L';
/** Supervisor status: for import */
public static final char SUPERVISOR_STATUS_FOR_IMPORT = 'I';
/** Supervisor status: in progress */
public static final char SUPERVISOR_STATUS_INPROGRESS = 'R';
/** Supervisor status: import error */
public static final char SUPERVISOR_STATUS_IMPORT_ERROR = 'E';
/** Supervisor status: import KO */
public static final char SUPERVISOR_STATUS_IMPORT_OK = 'T';
/** Supervisor status: cancelled */
public static final char SUPERVISOR_STATUS_CANCELLED = 'C';

Non non mon code est bien appelé.
J’ai enlevé les logs pour ne pas polluer le code du ticket si vous regardez bien ma deuxième capture d’écran, un fichier .err est bien généré et le contenu est :


Mon code a donc bien été exécuté.

La seule solution que j’ai trouvé pour mettre mon import en erreur est de lancer une RuntimeException.
Avez-vous dans votre code un try catch qui annulerai le set du statut ?
Cordialement

Il faut bien sortir en exception pour terminer en erreur de chargement. En V5 ça a dû évoluer car Simplicité gère 2 exceptions (JSONException, InterruptedException), mais toutes les autres Throwable terminent en SUPERVISOR_STATUS_LOAD_ERROR.

@david tu confirmes ? pourquoi le statut ne serait pas remonté en V4 ?

Le but du jeu dans l’évol de SimpleJSONAdapter était - de mémoire - de se servir de JSONException pour remonter des erreurs fonctionnelles (comme en 4), de savoir gérer l’interruption (avec la InterruptedException) et que les autres cas d’exceptions soient considérées comme des erreurs techniques qui finissent en SUPERVISOR_STATUS_LOAD_ERROR

Pour que je comprenne bien le point, ce qu’il manque c’est la remontée du statut SUPERVISOR_STATUS_IMPORT_ERROR dans le cas des simples erreurs fonctionnelles ?

Exactement.
Via un cron, on lance de manière automatique un action qui va récupérer des données d’une source externe et qui lance un adapteur pour traiter ces données.
Nous souhaitons que si le fichier source est mal formé ou contient des erreurs fonctionnelles, on puisse mettre l’exécution en erreur afin que l’on sache que l’import s’est mal passé ou incomplètement.
Actuellement même si je lance une JSONException, le statut de l’import est toujours OK.

OK j’ai fait les modifs dans ce sens (en V5 et V4), ce sera disponible dans le build de ce soir

Vous avez un exemple de mise en oeuvre içi
http://community.simplicite.io/t/csv-adapter-example/2110

ok merci @david.
Merci @nathalie, j’ai bien compris la mise en oeuvre, c’est juste que mon statut n’es pas pris en compte (en tout cas d ans un JSONAdapter)