XSD File einlesen und validieren

darksmilie

Erfahrenes Mitglied
Hi,

ich habe ein Problem ein XSD-File einzulesen.

Meine Umstände: Ich programmiere an einem Plugin für eine RCP Anwendung. In diesem Pluginhabe ich ein XML Editor programmiert, welcher bereits das normal XML erfolgreich validieren kann.

Nun möchte ich auch bei bestimmten Files eine XSD-Validierung mit einbauen, wobei ich allerdings Probleme habe das XSD-File zu lesen.

Meine Pluginstruktur:

plugin
->src(Source)
->icons(Folder)
->xsd(Folder)
->META-INF(Folder)
->plugin.xml
->plugin.properties

Meine XSD-Files liegen im "xsd" Ordner und leider bin ich noch nicht dahinter gekommen wie ich auf diese Files zugreifen kann. Den direkten Pfad von meinem Rechner kann ich nicht benutzen, da die Anwendung auch auf anderen Rechnern laufen soll.

Meine XSD-Validierung Wege:
Code:
  SchemaFactory factory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
  InputStream stream = getClass().getResourceAsStream("./xsd/" + elementSet.getName() + ".xsd");
  if(stream instanceof FileInputStream) {
    Schema schema = factory.newSchema(new StreamSource(stream));
    Validator validator = schema.newValidator();
    validator.validate(new StreamSource(xmlFile);
  }

Code:
  DocumentBuilderFactory factory =
  DocumentBuilderFactory.newInstance();
  factory.setNamespaceAware(true);
  factory.setValidating(true);
  factory.setAttribute(
    "http://java.sun.com/xml/jaxp/properties/schemaLanguage",
    "http://www.w3.org/2001/XMLSchema");
  factory.setAttribute(
    "http://java.sun.com/xml/jaxp/properties/schemaSource",
    "xsd/" + xsdName + ".xsd");
  DocumentBuilder builder = factory.newDocumentBuilder();
  builder.setErrorHandler(errorHandler);
  builder.parse(new File(xmlFile));
 
Du kannst einfach einen relativen Pfad von deinem Plugin aus angeben. Angenommen dein Plugin liegt direkt im plugin-folder, dann wäre das ./xsd/xsdfile.xsd
 
Das klappt auch nicht, er möchte das File immer von meinem Workspace lesen, aber da liegt mein File nicht.

Ich bekomme immer diese Fehlermeldung:
schema_reference.4: Failed to read schema document 'file:C:/workspace_eclipse/runtime-ABC.product/Ed
itor%20Files/xsd/xsdFile.xsd', because 1) could not find the document; 2) the document could not b
e read; 3) the root element of the document is not <xsd:schema>.

Dazu muss ich noch sagen das sich das XML-File an dieser Location befindet, vielleicht mache ich auch bei der validierung etwas falsch. Bei dieser Fehlermeldung habe ich den zweiten Weg gewählt.
 
Die Datei liegt dort? Versuch vielleicht mal mit folgender Lösung:

Java:
"file:/"+getProperty("user.dir")+"xsd/xsdfile.xsd"
 
So ich habs gelösst bekommen.

so funktionierts:

Code:
  Bundle bundle = Platform.getBundle("pluginId");
  URL url = FindSupport.find(bundle, new Path("./xsd/"));
  File dir = new File(FileLocator.toFileURL(url).toURI());
 
Zuletzt bearbeitet:
Zurück