king
I'm new here

getResourceAsStream liefert "null"

Hallo Ihr,

im Rahmen der Entwicklung einer Modul-Komponente ("project-app") versuchen wir eine Resource (hier: BeanShell-Skripten), die Teil des Moduls sind (und im "files"-Unterordner des Moduls liegen) über folgende API-Aufrufe zu laden:

public class XXX implements ProjectApp {

   @Override

   public void installed() {

      ...

         //liefert immer null Smiley Sad

         script = getClass().getClassLoader().getResourceAsStream("files/" + XXX + ".bsh");

      ...

   }

}

getResourceAsStream liefert dabei immer "null". Warum? (Im Debugging sehen wir eine Instanz des "java.net.FactoryURLClassLoader" ClassLoaders).

Das Modul lässt sich ohne Fehlermeldung installieren. Allein die automatisierte Installation von BeanShell-Skripten bei der Installation der Projekt-Komponente gelingt nicht.

Unsere "module.xml" sieht so aus:

<module>

    <name>FirstSpirit Services</name>
    <version>4.2.219</version>
    <description>FirstSpirit components (web service clients and libraries)</description>
    <vendor>XXX</vendor>
    <components>

        ...

        ...

        <!-- FirstSpirit project local resources -->
        <project-app>
            <name>PageExpire</name>
            <description>Project component configuration dialog of page expiration</description>
            <class>xxx.xxxxx.fsm.pageexpiry.projapp.PageExpiryApp</class>
            <configurable>xxx.xxxxx.fsm.pageexpiry.projapp.PageExpiryConfigurator</configurable>
            <resources>
                <resource>files/</resource>
                <resource>lib/pageexpiry-gui.jar</resource>
            </resources>
        </project-app>

        ...

        ...

    </components>

</module>

Die fertige Modulstruktur unter "xxx.fsm" sieht so aus:

/

- files

    - XXX.bsh

- lib

    - java-libs

- META-INF

    - module.xml

    - MANIFEST.MF

WICHTIG: Wir stellen fest: wird NUR die PROJECT-APP in der "module.xml" allein notiert (und sämtliche anderen MODULE COMPONENTEN auskommentiert) liefert "getResourceAsStream()" NICHT NULL sondern den InputStream der Resource! Was könnte hier mit dem ClassLoading-Verhalten NICHT ZUSAMMENPASSEN? Auch ein Verschieben der Reihenfolge bringt keine Änderung!

In dem Modul sind unterschiedliche Komponenten enthalten: LIBRARY, SERVICE, PROJECT-APP

0 Kudos
1 Reply
king
I'm new here

Wir konnten das Problem selbst lösen. Was es genau war - können wir leider nicht mehr SICHER identifizieren. Wir vermuten aber eine Java Library "TableLayout", deren API wir in den Konfigurationsdialogen genutzt hatten. Diese ist jedoch bereits in der "fs-client.jar" enthalten. Vielleicht brachte dies den ClassLoader aus dem Tritt?

Fakt war auch, dass zum Zeitpunkt, als "getResourceAsStream()" null lieferte, noch keine Bibliothek in das Modul integriert war, die die ProjectApp auch tatsächlich nutzte. Vielleicht muss zu einer ProjectApp auch immer eine entsprechende LIBRARY-Komponente im Modul enthalten sein?

0 Kudos