Imvertor / Imvertor-Maven

Mavenized version of Imvertor
http://www.imvertor.org
9 stars 12 forks source link

Problemen met speciale karakters bij het comparen van modellen #528

Open melsk-r opened 2 months ago

melsk-r commented 2 months ago

Bij het comparen lopen we tegen een aantal gelijksoortige problemen binnen Imvertor aan.

Zie hiervoor de volgende bestanden in deze zip: • ImZTC release 20210309.EAP • ImZTC release 20230110.EAP

Beide bestanden bevatten het SIM ImZTC model. De eerste met release ‘20210309’ en de tweede met release ‘20230110’. Beide modellen valideren zonder problemen. Op het moment dat we de bij het verwerken van het tweede bestand de compare parameter met de daarachter staande waardes gebruiken

Run parameter Waarde
compare release
comparewith 20210309
comparemethod default

krijgen we echter de volgende foutmelding:

INFO  2024-08-15 12:38:20,510 : Comparing releases
Error on line 1 column 974 of imvertor.20.release.2.compare-diff.xml:
  SXXP0003   Error reported by XML parser: Invalid byte 2 of 3-byte UTF-8 sequence.: Invalid
  byte 2 of 3-byte UTF-8 sequence.. Caused by
  org.apache.xerces.impl.io.MalformedByteSequenceException: Invalid byte 2 of 3-byte UTF-8 sequence.
ERROR 2024-08-15 12:39:06,844 : Step-level system error: Transformation causes a fatal error: org.xml.sax.SAXParseException; systemId: file:/C:/Data/KING/Kern-taken/Imvertor/imvertor_work/KING/imvert/imvertor.20.release.2.compare-diff.xml; lineNumber: 1; columnNumber: 974; Invalid byte 2 of 3-byte UTF-8 sequence.
java.lang.Exception: Transformation causes a fatal error: org.xml.sax.SAXParseException; systemId: file:/C:/Data/KING/Kern-taken/Imvertor/imvertor_work/KING/imvert/imvertor.20.release.2.compare-diff.xml; lineNumber: 1; columnNumber: 974; Invalid byte 2 of 3-byte UTF-8 sequence.
    at nl.imvertor.common.Transformer.transform(Transformer.java:265)
    at nl.imvertor.common.file.XmlFile.prettyPrintXml(XmlFile.java:615)
    at nl.imvertor.ReleaseComparer.XmlComparer.compare(XmlComparer.java:74)
    at nl.imvertor.common.file.XmlFile.compareV2(XmlFile.java:510)
    at nl.imvertor.ReleaseComparer.ReleaseComparer.releaseCompare(ReleaseComparer.java:122)
    at nl.imvertor.ReleaseComparer.ReleaseComparer.run(ReleaseComparer.java:70)
    at nl.imvertor.ChainTranslateAndReport.main(ChainTranslateAndReport.java:203)

Ik heb dit onderzocht en het probleem bleek hem te zitten in de speciale karakters zoals Ä, ë, ï, ö, …, –, ”, “, ‘, ’, é die in documentatie achtige velden gebruikt worden. Dat gold voor beide release. In XML Spy gaf dat de volgende foutmelding op het door Imvertor t.b.v. de compare gegenereerde bestand ‘imvertor.20.release.2.compare-diff.xml’:

image

De genoemde karakters heb ik vervolgens in de geëxporteerde xmi bestanden ‘SIM ImZTC-1755.xml’ en ‘SIM ImZTC-2186.xml’ (zie eveneens de zip) handmatig vervangen door resp A, e, i, o, …, -, ‘, ‘, ‘ en ‘. De é kwam alleen voor in het woord ‘één’ en dat woord is vervangen door het cijfer 1.

Na inlezen van de gecorrigeerde xmi bestanden in de beide EAP bestanden en het opnieuw op dezelfde wijze verwerken daarvan trad het probleem niet meer op.

ArjanLoeffen commented 2 months ago

@melsk-r kun je me de imvert/* folder sturen van de run waarin het mis gaat?

Ik heb het zelf getest op een testmodel en daarin gaat alles goed.

Verschil is wel dat ik met QEA werk en niet EAP. Ik heb jouw EAP dus eerst even omgezet naar QEA. De XMI export van die QEA bevat alle diacrieten op een correcte manier.

melsk-r commented 2 months ago

Bij deze: imvert.zip

ArjanLoeffen commented 2 months ago

Het lijkt erop dat het compare XML bestand imvertor.20.release.2.compare-diff.xml volgens ANSI is weggeschreven. Gek genoeg staar de XML declaratie er ook niet boven:

<?xml version="1.0" encoding="UTF-8"?>

Het moet als UTF-8 worden weggezet. Welke versie van Imvertor gebruik je? Dan kijk ik verder.

melsk-r commented 2 months ago

Klopt, had ik ook gezien. Dit keer heb ik 4.0 gebruikt. Ik meen echter dat ik 4.1 ook al gebruikt heb met hetzelfde resultaat maar zeker weten doe ik dat niet.

ArjanLoeffen commented 2 months ago

Ik denk dat het een simpele bug was: In de XmlComparer java code was niet opgegeven welke characterset de FileWriter moet gebruiken. Dat is nu rechtgezet.

ArjanLoeffen commented 2 months ago

Check Nightly-build. Kan worden doorgezet naar master.

melsk-r commented 2 months ago

@ArjanLoeffen Werkt nu prima op de Nightly build maar ook op de 4.1 versie dus ik vermoed dat je het al hebt doorgezet naar de master. Issue kan wat mij betreft gesloten worden.