within my jar I am providing my xsd Schema file, ie following structure:
myjar
- myschema.xsd
I can verify the file is present at root level inside the JAR when I unzip it.
I am adding the xsd Schema to the SchemaFactory in the following way:
public void loadXSDSchema() throws InitializationException {
SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
try {
xsdSchema = sf.newSchema(new File(getClass().getClassLoader().getResource(XSD_SCHEMA_FILE).getFile()));
} catch (SAXException e) {
throw new InitializationException(ApiExceptionId.INIT_XSD_SCHEMA, e);
}
Unfortunately it is not working in the produced JAR file - I am getting a FileNotFoundException:
Caused by: java.io.FileNotFoundException: D:\dev\myjar.jar!\myschema.xsd (Die Syntax f▒r den Dateinamen, Verzeichnisnamen oder die Datentr▒gerbezeichnung ist falsch)
I thought I did know that you need to read it as a Resource when it's packaged inside a jar but reality shows me I seem to be doing something wrong.
Any hints on what I am missing?
You can not get it as a file since it is not a file. It is an entry in your jar file. Files are operating system objects, and from OS point of view the jar file is the file. Although you can get an InputStream
via ClassLoader
and you can read the content of it via this InputStream.
Schema xsdSchema = sf.newSchema( new StreamSource(ClassLoader.getSystemResourceAsStream("shema.xsd")));