itplr-kosit / validator

Validates XML documents with XML Schema and Schematron
Apache License 2.0
80 stars 42 forks source link

Verwendung als lib in JAR (Spring Boot) scheitert an external scheme "nested" #140

Open melo0187 opened 1 week ago

melo0187 commented 1 week ago

Nachdem ich aufgrund der veralteten Dokumentation die ersten Schwierigkeiten bei der Verwendung des KoSIT validators 1.5.0 in einer Spring Boot 3 Applikation mit Java 21 überwunden hatte stellte ich fest, dass das Laden der Konfiguration zur Laufzeit nicht funktioniert, wenn die Applikation als JAR verpackt ist.

Um die Situation besser zu erklären, habe ich ein Minimal-Beispiel hochgeladen: https://github.com/melo0187/springboot-kosit

Das Kernproblem scheint folgendes zu sein:

Caused by: org.xml.sax.SAXParseException: schema_reference: Failed to read schema document 'UBL-CommonAggregateComponents-2.1.xsd', because 'nested' access is not allowed due to restri
ction set by the accessExternalSchema property.

Ich konnte dies nur beheben, indem ich eine eigene ResolvingStrategy verwende. Dabei habe ich vollständig von StrictRelativeResolvingStrategy abgeschrieben und nur noch das scheme "nested" neben "file" als erlaubt definiert, siehe hier. Damit lässt sich die KoSIT Konfiguration zur Laufzeit auch aus einem JAR heraus erfolgreich initialisieren.

Habe ich etwas falsch gemacht? Liegt das womöglich an Java 21 und/oder der Verwendung von Spring Boot 3 und wie dabei das JAR erzeugt wird?

Ich überlasse es dem Validator Team zu bewerten, ob mein Ansatz Sinn ergibt und bin gerne bereit einen PR beizutragen, wenn dem so wäre.