claeis / ilivalidator

INTERLIS validator
14 stars 21 forks source link

objectCount() throws NPE #337

Closed edigonzales closed 2 years ago

edigonzales commented 2 years ago

Constraint im Validierungsmodell (in einer Knoten-View):

MANDATORY CONSTRAINT INTERLIS.objectCount(BetreiberRef)==1;

Beziehung:

ASSOCIATION Knoten_BetreiberAssoc =
  BetreiberRef (EXTERNAL) -- {0..1} SIA405_Base_Abwasser_LV95.Administration.Organisation;
  Knoten_BetreiberAssocRef -- {0..*} Knoten;
END Knoten_BetreiberAssoc;

Originalmodelle siehe Anhang.

java -jar /Users/stefan/apps/ilivalidator-1.11.13/ilivalidator-1.11.13.jar --modeldir ".;https://vsa.ch/models"  --config config.toml 11005_ok.xtf

Archive.zip

edigonzales commented 2 years ago

Es scheint, dass in der Methode "Interlis.evaluateFunction" was nicht stimmt resp. die Auswertung der Funktion "INTERLIS.objectCount" liefert keinen Wert zurück, da weder value.getComplexObjects()!=null noch value.getViewable()!=null true sind.

Der auszuwertende Value, der bei "validator.evaluateExpression" entsteht, wird mittels "Value.createOidValue" erzeugt, enthält also bloss einen String.

edigonzales commented 2 years ago

Mit der folgenden Assoziation und folgendem Constraint funktioniert es:


    ASSOCIATION Typ_Grundnutzung_Dokument =
      Typ_Grundnutzung -- {0..*} Typ_Grundnutzung;
      Dokument (EXTERNAL) -- {0..*} SO_Nutzungsplanung_20171118.Rechtsvorschriften.Dokument;
    END Typ_Grundnutzung_Dokument;
MANDATORY CONSTRAINT INTERLIS.objectCount(Dokument)>=1 ;

Ohne es zu prüfen: Es wird wohl - wegen der zum Problembeispiel unterschiedlichen Multiplizität der Rolle - kein "Value.createOidValue" erzeugt, sondern was anderes, das dann nicht verloren geht.