XML aus JAR Problem

lumpmitpump

Grünschnabel
Hallo,

ich bekommen beim einlesen (oder vielmehr dem Versuch dessen;) ) eine
"java.net.MalformedURLException"

Code:
      public SETS_STRUCTURE[] readDefaultSets(){
		SETS_STRUCTURE[] result=new SETS_STRUCTURE[2];
		result[0]=readSetsFromXML("/default/sets.xml");
		result[1]=readSetsFromXML("/default/rsets.xml");
 		return result;
	}
	
	public SETS_STRUCTURE readSetsFromXML(String source){
		SETS_STRUCTURE s = null;
		try{
			SAXBuilder builder= new SAXBuilder();
			System.out.println(source);
			InputStream is = this.getClass().getResourceAsStream(source);
			Document doc = builder.build(is);
			Element root = doc.getRootElement();
		    List sets = root.getChildren();
		    Iterator setIterator = sets.iterator();
           [...]
               }
         }

aussem Verzeichnis statt dem fertigen jar heraus gehts (InputSource is= new InputSource(source); anstelle des streams)
 
Hallo,

was gibst Du denn als source an? Deine .jar in der das XML liegt?

Eine unelegante Möglichkeit wäre es die XML aus der Jar auf der Festplatte abzulegen, die Daten aus dem XML ggf. zurückzuschreiben und dann wieder in das .jar zu packen oder halt zu löschen.

gruß klaus.
 
das hin und herkopieren wollt ich mir eigentlich sparen...


nach freund google dachte ich ich rbauch ihm als source nich dir jar zu übergeben sondern den pfad inenrhalb der jar (also unterordner/datei.xml)
 
Also ich kenn mich damit zu wenig aus, um sagen zu können, wo der Fehler liegt. Ich hab zwar auch schon mehrfach XML-Dateien aus Jars eingelesen (und es hat immer funktioniert), aber ich hab da einen etwas anderen Weg benutzt.

Irgendwie sowas in der Art:

Code:
InputStream is = MyClassName.class.getResourceAsStream(source);
Document doc = new SAXReader().read(is);
[...]

Ansonsten sieht dein Code fast genauso aus, wie der von mir geschriebene. Aber ich bin eigentlich sicher, dass es auch mit dem SAXBuilder irgendwie gehen muss.
 
das hin und herkopieren wollt ich mir eigentlich sparen...


nach freund google dachte ich ich rbauch ihm als source nich dir jar zu übergeben sondern den pfad inenrhalb der jar (also unterordner/datei.xml)

Hm, das würde mich wundern...woher soll der Compiler wissen, wo die .jar liegt? Bzw. um welche es sich handelt? Kann natürlich sein, das ich mich irre, aber es würde mich auf jeden Fall sehr wundern.

gruß klaus.
 
Also die source übergebe ich auch immer nur so wie oben beschrieben (z.B. "/default/sets.xml") - Klappt eigentlich wunderbar. Dadurch dass man halt von der Klassendatei ausgeht ist man ja automatisch im richtigen Jar-File. Also da kann eigentlich nicht der Fehler sein.
 
Folgender Code stammt aus einer Klasse namens Parser ... das ganze wird in eine Jar-Datei gepackt und an einem OSGi-Framework ausgeführt. Die Datei suffixes.xml liegt auch im Jar, allerdings nicht in einem Package, sondern halt ohne Unterverzeichnis. Parser hingegen liegt in 5 Unterverzeichnissen (de.usw...). So wie es ist, funktioniert es wunderbar :) (Achja, die Variable suffixes ist natürlich auch statisch.)

Code:
	public static void loadSuffixes() {
		suffixes = new Hashtable<String, String>();
		final InputStream inputStream = Parser.class
				.getResourceAsStream("/suffixes.xml");
		try {
			final Document xml = new SAXReader().read(inputStream);
			Element root = xml.getRootElement();
			List list = root.selectNodes("suffixes");
			Iterator it = list.iterator();
			for (int i = 0; i < list.size(); i++) {
				Element entry = (Element) it.next();
				String prefix = entry.attributeValue("id");
				String suffix = entry.attributeValue("suffix");
				suffixes.put(prefix, suffix);
			}
		} catch (DocumentException e) {
			throw new RuntimeException(e);
		}
	}
 
so mit deinem inputstream klappts lustiger weise auch mit dem saxbuilder.

gibts ne möglichkeit auf angere packages zuzugreifen?

bsp:
der code von oben ist im package "io" und ich möchte die dateien aus dem ordner/package "default" aus dem jar laden... wenn nich is auch nicht wild - wäre nur schöner wegen übersicht, struktur und so...

aber danke schonmal für die flotten anregungen
 
Zurück