# xsd-Datei ins jar file



## bronkowitz (11. Jan 2015)

Hallo Forum,

ich bin noch neu was XML-angeht und möchte gerne, dass mein Programm eingelesene XML-Dateien gegen ein Schema validiert. Ich arbeite mit NetBeans und habe die Schemadatei jetzt im src-Ordner. Was mir nicht klar ist, ist wie (bzw. ob) man diese Datei im Java-Code ansprechen kann, ohne sie ebenfalls von extern einlesen zu müssen.

Gruß,
bronkowitz


----------



## dzim (11. Jan 2015)

java - What's the best way to validate an XML file against an XSD file? - Stack Overflow


----------



## bronkowitz (12. Jan 2015)

tja, erstmal danke soweit, leider komme ich trotzdem nicht recht weiter. In Zeile 9 bekomme ich eine NullPointerException (auch mit dem http-String) und auch wenn ich den absoluten Pfad auf die Datei setze. Das ist mein Code, wo ist der Fehler?


```
public boolean validateXML(File f) {
        boolean isErfolgreich = true;

        schemaFile = getClass().getClassLoader().getResource("test.xsd");
//        schemaFile = getClass().getClassLoader().getResource("http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd");
        Source xmlFile = new StreamSource(f);
        SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
        try {
            Schema schema = schemaFactory.newSchema(schemaFile);
            Validator validator = schema.newValidator();
            try {
                validator.validate(xmlFile);
            } catch (IOException ex) {
                System.out.println(xmlFile.getSystemId() + " ist nicht valide");
            }
        } catch (SAXException ex) {
            System.out.println("Fehler bei Schema-Erstellung");
        }

        return isErfolgreich;
    }
```


----------



## dzim (13. Jan 2015)

kA. Eine NullPointerException spricht ja dafür, dass etwas nicht initialisiert wurde. In deinem Fall denke ich, dass das Problem aber eher die URL ist, die du an #newSchema(URL) übergibst. Warum? Nun ja, das URL-Schema für Jars wird wahrscheinlich nicht con der Methode (bzw. der Logik dahinter) verstanden.
Es gibt eine Variante der Methode, die eine Source entgegen nimmt, also versuche es mal so:

```
Source schemaSource = new StreamSource(getClass().getClassLoader().getResourceAsStream("test.xsd"));
Schema schema = schemaFactory.newSchema(schemaSource);
// ...
```
Stelle auch sicher, das sich das Schema "test.xsd" wirklich im selben Package wie die Klasse, aus der heraus du das hier validierst, liegt. (Evtl. nutze den absoluten Pfad im Classloader...)


----------



## bronkowitz (14. Jan 2015)

hat leider auch nicht funktioniert, irgendwie stosse ich da immer nur auf neue Fragen. Ich versuche jetzt mal den Inhalt programmtechnisch zu erzeugen, vielleicht gehts dann - erstmal danke


----------



## bronkowitz (17. Jan 2015)

so, nun hat es funktioniert - allerdings wieder so ähnlich wie Du vorgeschlagen hattest. Ich poste es nochmal, vielleicht interessiert es ja auch noch andere


```
Schema schema = schemaFactory.newSchema(new StreamSource(getClass().getResourceAsStream("test.xsd")));
```

Auf diese Weise kann die Schema-Datei auch im jar-File gefunden werden. Mit .getFile() funktioniert es z.B. aus der Entwicklungsumgebung heraus, aber nicht mit dem jar.

Danke und Gruß
bronkowitz


----------

