- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Aufruf eines fremden Services: ClassCastException
Hallo Zusammen,
ich versuche verzweifelt aus meinem Modul (Service) einen Service eines Drittanbieters mit Hilfe der getService("ServiceName") aufzurufen:
FremdServiceProxy service = (FremdServiceProxy) this._environment.getConnection().getService("Fremd Service");
Leider erhalte ich immer folgende ClassCastException:
java.lang.ClassCastException: com.fremdFirma.fsmodule.FremdServiceProxy cannot be cast to com.fremdFirma.fsmodule.FremdServiceProxy
at com.meineFirma.modul.FsSceletonService.process(FsSceletonService.java:59)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at de.espirit.firstspirit.server.module.ServiceWrapperImpl.invoke(ServiceWrapperImpl.java:90)
at $Proxy35.process(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at de.espirit.firstspirit.io.DefaultServerHandler.callManager(DefaultServerHandler.java:62)
at de.espirit.firstspirit.server.io.handler.ManagerCall.doCall(ManagerCall.java:91)
at de.espirit.firstspirit.server.io.handler.ManagerCall.handle(ManagerCall.java:67)
at de.espirit.firstspirit.server.io.ManagerCallWorker.run(ManagerCallWorker.java:108)
at de.espirit.firstspirit.server.ExecutionManagerImpl$RunnableWrapper.call(ExecutionManagerImpl.java:553)
at de.espirit.firstspirit.server.ExecutionManagerImpl$ExtendedCallable.call(ExecutionManagerImpl.java:520)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at de.espirit.common.util.BoundedExecutorService$RunnableWrapper.run(BoundedExecutorService.java:419)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
at de.espirit.common.util.SuspendableThread.run(SuspendableThread.java:36)
Im Modul Developer Document finde ich zwar unter 2.10.2 einen Hinweis auf eine mรถgliche Ursache, allerdings bin ich mir nicht Sicher ob a) das Beispiel auch meinen Fall abdeckt und b) wie die angegebene Lรถsung fรผr meinen Fall aussieht.
Benutzte FS Version: 4.2.461.48921
Hat hier jemand einen Tipp fรผr mich? Danke im Voraus!
- Labels:
-
Developers
-
Knowledgebase
Accepted Solutions
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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>
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hat keiner hier eine Idee?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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>
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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

