Andy: DTD in jar File verstauen

Hallo!

Ich hab' folgendes Problem: Ich möchte per SAX meine Konfigurationsdaten (xml-files) in mein Hauptprogramm einlesen. Soweit, sogut.
Ich habe also meine Klassen .class, meine Konfigurationsdaten .xml und die dazugehörigen Document Type Definitions .dtd

Liegt alles entpackt rum, funktioniert alles prima, aber sobald ich ein jar-File erstellen möchte, in dem alles liegt, springt mir das Ganze mit einem File-Not-Found-Error über die Klinge, da er die die DTDs innerhalb des jars nicht öffnen kann. Liegen sie neben dem jar im gleichen Verzeichnis ist alles in Butter.
Als einziges Work-a-round habe ich momentan die <!DOCTYPE>-Angabe wegzulassen, so dass SAX nicht die DTDs zum validieren braucht! Ist aber nicht der wahre Jakob!

Also: Wie bring ich es meinen Programm / speziell dem SAXParser bei die DTDs innerhalb vom jar zu öffnen?

DANKE!

Ciao,
Andy

  1. Hallo,

    Also: Wie bring ich es meinen Programm / speziell dem SAXParser bei die DTDs innerhalb vom jar zu öffnen?

    Mir ist das Problem noch nicht über den Weg gelaufen. Ich kann dir daher
    keine eigenen Tips geben.

    Meine kurze Google-Recherche hat jedoch eine vergleichbare Frage im
    Java Forum hervorgebracht. Dort ist zu lesen, daß ein eigener Resolver
    verwenden werden kann. Ein Artikel beim IBM developerWorks erklärt
    das wohl genauer.
    (Ich hab mir letztgenannten Artikel aus Zeitgründen nicht näher
    angeschaut. Falls er völlig am Thema vorbeigehen sollte, schreib das
    bitte hier rein, damit das für später im Archiv dokumentiert bleibt.)

    Gruß
    Slyh

    1. Hallo Slyh!

      Ein Artikel beim IBM developerWorks erklärt
      das wohl genauer.

      Der Artikel gibt gute Hinweise, der angebene ClassPathEntityResolver funktioniert so aber nicht, zumindest bei mir, da ich "DefaultHandler" erweitere und nicht eine eine eigene Klasse mit Interface "EntityResolver" implementiere. Bei mir wird ein komplette URL als SystemId übergeben (also file://.../meine.dtd) und ich muss die Entity selber isolieren (meine.dtd) damit ich per getclass().getRessourceAsStream() auch aus Jars lesen kann!

      Kann sein das das die direkte Implementation anders funktioniert. Habe das jetzt nicht getestet!

      Wollte darauf hinweisen!

      Also danke!

      Ciao,
      Andy