MichaelN
I'm new here

Wie eigenen Service im WebClient nutzen?

Ich habe die folgende Module.xml:

<!DOCTYPE module SYSTEM "module.dtd">

<module>

    ...

          <components>

                    <!-- server-wide resources -->

                    <library>

                              <name>My Library</name>

                              <resources>

                                        <resource>lib/myLib.jar</resource>                                                     

                              </resources>

                    </library>

                    <project-app>

                              <name>My ProjectApp</name>

                              <class>my.package.MyProjectApp</class>

                    </project-app>

                    <web-app>

            <name>My WebClient Extensions</name>

                              <class>my.package.MyWebApp</class>

            <web-xml>web.xml</web-xml>

            <web-resources>

                                        <resource>lib/myLib.jar</resource>                                                     

            </web-resources>

        </web-app>

                    <service>

                              <name>My Service</name>

                              <class>my.package.MyServiceImpl</class>

                    </service>

        ...

          </components>

</module>

und meine Implemtierung MyServiceImpl liefert:

@Override

@SuppressWarnings("rawtypes")

public Class<? extends ServiceProxy> getProxyClass() {

    return MyServiceProxy.class;

}

Wenn ich nun im JavaClient den Service hole funktioniert alles wunderbar:

ServicesBroker servicesBroker = context.requireSpecialist(ServicesBroker.TYPE);

MyService myService = servicesBroker.getService(MyService.class);

Hole ich allerdings den Service per ToolbarContext:

@Override

public void execute(ToolbarContext context) {  

    ServicesBroker servicesBroker = context.requireSpecialist(ServicesBroker.TYPE);

    MyService myService = servicesBroker.getService(MyService.class);

}

erhalte ich die Fehlermeldung:

Cannot cast my.package.MyServiceProxy to my.package.MyService

Im Log steht dann:

WARN  04.11.2013 15:27:16.995 (de.espirit.firstspirit.server.io.AbstractServiceLocator): incompatible class loaders? de.espirit.firstspirit.server.jetty.JettyClassLoader@265aeb9e / de.espirit.firstspirit.server.module.ExtendedUrlClassLoader@67a0326f-37

auch folgendes wirft eine Exception:

@Override

public void execute(ToolbarContext context) {  

    ServicesBroker servicesBroker = context.requireSpecialist(ServicesBroker.TYPE);

    MyServiceProxy myService = servicesBroker.getService(MyServiceProxy .class);

}

Cannot cast my.package.MyServiceProxy to my.package.MyServiceProxy

was mache ich falsch?

0 Kudos
3 Replies
MichaelN
I'm new here

Es scheint auf jeden Fall ein Classloader-Problem zu sein

Cannot cast my.package.MyServiceProxy to my.package.MyServiceProxy

aber ich sehe die Lösung nicht.

0 Kudos

Hallo Michael,

es könnte sich hier um ein bekanntes Problem handeln (interne Ticket-Id 144760). Wende dich doch bitte mit der FirstSpirit-Version, komplettem Stacktrace und dem FSM an unseren Helpdesk, damit das verifiziert werden kann.

Viele Grüße

Christoph

0 Kudos
rens
Crownpeak employee

Kleine Korrektur:

Die interne Ticket-Id ist _nicht_ 144760 sondern 144670.

Viele Grüße,

  Adam

0 Kudos