Skip to main content

Aufruf eines fremden Services: ClassCastException

Comments

7 comments

  • Zendesk API User
    Author: stephan - 1/22/2013 10:20

    Hallo,

    das Problem sollte in der Tat durch unterschiedliche Classloader verursacht werden. Wie sieht denn die module.xml aus und wie ist die Dateistruktur des Moduls?

    Viele Grüße

    J. Stephan

    0
  • Zendesk API User
    Author: Josef_Awad - 1/22/2013 11:32

    Hallo Herr Stephan,

    die module.xml's & Dateistrukturen sehen wie folgt aus:

    Mein Modul:

    module.xml:

    <?xml version="1.0" encoding="UTF-8"?>

    <module>

        <name>MeinModul</name>

        <version>0.1</version>

        <description>-</description>

        <vendor>meineFirma</vendor>

        <components>

            <service>

                <name>Mein Service</name>

                <description>-</description>

                <class>com.meineFirma.modul.FsSceletonService</class>

       <resources>

        <resource>lib/mein_service.jar</resource>

       </resources>

            </service>

        </components>

    </module>

    Dateistruktur (MeinModul.fsm):

    lib/

    lib/mein_service.jar

    META_INF/

    META_INF/INDEX.LIST

    META_INF/MANIFEST.MF

    META_INF/module.xml

    Fremd Modul:

    module.xml:

    <!DOCTYPE module SYSTEM "../../../server/module.dtd">

    <module>

      <name>FremdModul</name>

      <version>9.9</version>

      <description>-</description>

      <vendor>fremdFirma</vendor>

      <components>

    <service>

         <name>Fremd Service</name>

         <description>-</description>

         <configurable>com.fremdFirma.fsmodule.FremdServiceConfiguration</configurable>

         <class>com.fremdFirma.fsmodule.FremdServiceServiceImpl</class>

      <resources>

       <resource>libs/FremdService0.jar</resource>

       <resource>libs/FremdService1.jar</resource>

       <resource>libs/FremdService2.jar</resource>

         </resources>

    </service>

      </components>

    </module>

    Dateistruktur (FremdModul.fsm):

    libs/

    libs/FremdService0.jar

    libs/FremdService1.jar

    libs/FremdService2.jar

    META_INF/

    META_INF/module.xml

    Danke für Ihre Unterstützung!

    Viele Grüße,

    Josef Awad

    0
  • Zendesk API User
    Author: Josef_Awad - 1/24/2013 11:32

    Hat keiner hier eine Idee?

    0
  • Zendesk API User
    Author: stephan - 1/24/2013 11:55

    Hallo,

    so direkt kann ich an ihren Daten auch keinen Fehler feststellen. Es könnte zu Problemen kommen wenn in einem der Jars des Fremdmoduls eine Klasse existiert, die sie im Jar Ihres Moduls auch verwenden - dazu müsste man in die Jars schauen.

    Alternativ könnten sie es auch mal ohne Cast probieren:

    FremdServiceProxy service = this._environment.getConnection().getService("Fremd Service");

    Viele Grüße

    J. Stephan

    0
  • Zendesk API User
    Author: Josef_Awad - 1/24/2013 12:14

    Hallo,

    danke für die Antwort, ich habe beides versucht:

    1. Ich habe einfach alle meine Klassen um ein eindeutiges Kürzel erweitert, leider ohne Erfolg

    2. Leider liefert die Methode getService ein Object zurück dass ich auf den FremdServiceProxy Casten muss um Methoden des Services nutzen zu können -> kein Erfolg

    Leider erscheint mir die Aussage der Dokumentation widersprüchlich, wenn Services zwar immer als global verfügbar deklariert werden aber dann doch von unterschiedlichen Classloadern geladen werden und somit nicht untereinander kommunizieren können.

    Wie kann man dieses Problem vermeiden?

    0
  • Zendesk API User
    Author: andre - 1/24/2013 13:16

    FremdServiceProxy  existiert auch nur einmal, d.h. in einem jar?

    habe sie den fs-server mal neugestartet?

    schauen sie mal auf dem server in das data/modules verzeichnis...sind dort mehrere "alte" *jars/*.fsm's ihres moduls vorhanden? wenn ja, mal alle loschen und das modul neu installieren

    definieren Sie die Dienste mal so:

    <?xml version="1.0" encoding="UTF-8"?>

    <module>

        <name>MeinModul</name>

        <version>0.1</version>

        <description>-</description>

        <vendor>meineFirma</vendor>

        <components>

            <service>

                <name>Mein Service</name>

                <description>-</description>

                <class>com.meineFirma.modul.FsSceletonService</class>

              </service>

        </components>

    <resources>

        <resource>lib/mein_service.jar</resource>

       </resources>

    </module>

    0
  • Zendesk API User
    Author: Josef_Awad - 1/24/2013 16:28

    Hallo Zusammen,

    das war die Lösung!

    Für mein Verständnis: Bedeutet eine Ressourcendeklaration innerhalb der Service Tags in der module.xml, dass diese Ressource nicht mit demselben Classloader geladen werden wie diejenigen die außerhalb der Service Tags deklariert werden? Das sollte in der Dokumentation noch ergänzt werden (sofern ich das nicht überlesen habe).

    Vielen Dank für die Geduld und Hilfe!

    Viele Grüße,

    Josef Awad

    P.S. Der Cast auf den FremdServiceProxy war notwenig

    0

Please sign in to leave a comment.