Search the FirstSpirit Knowledge Base
Hallo zusammen,
ich versuche momentan eine eigene Eingabe Komponente im WebEdit zum laufen zu bringen.
Ich habe mir hierzu die bestehende Implementation der normlen Combobox angeschaut, hier wird eine zweite Factory in der module.xml eingehängt die für WebEdit (ServerGadgetFactory) verwendet wird.
Leider erhalte ich eine java.lang.NoClassDefFoundError: de/espirit/firstspirit/webedit/server/gadgets/GwtServerGadgetFactory für das Interface das die create Methode implementiert.
Die Jar (fs-webedit.jar) die diese Klasse beinhaltet liegt aber im WebEdit Context des Projekts.
FS Version: 5.0.425.60000
Java Version: 1.7.0_51
Factory für WebEdit:
public class TestComboboxServerGadgetFactory
implements GwtServerGadgetFactory<TestGomCombobox, ComboboxConfiguration>
{
/* (non-Javadoc)
* @see de.espirit.firstspirit.webedit.server.gadgets.GwtServerGadgetFactory#create(de.espirit.firstspirit.module.GadgetContext)
*/
public GwtServerGadget<ComboboxConfiguration> create(GadgetContext<TestGomCombobox> context)
{
return new TestComboboxServerGadget(context);
}
}
Fehler aus der Server Log:
WARN 10.02.2014 22:02:50.985 (/fs5webedit_11): Exception while dispatching incoming RPC call
FSVersion=5.0.425.60000#3442;JDK=1.7.0_51 64bit Oracle Corporation;OS=Linux 2.6.32-279.el6.x86_64 amd64;Date=10.02.2014 22:02:50
at com.google.gwt.user.server.rpc.RPC.encodeResponseForFailure(RPC.java:385)
at de.espirit.firstspirit.webedit.server.control.PollSupportingWebeditService.logAndEncodeThrowable(PollSupportingWebeditService.java:141)
at de.espirit.firstspirit.webedit.server.control.PollSupportingWebeditService.processCall(PollSupportingWebeditService.java:102)
at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:248)
at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:755)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
at de.espirit.firstspirit.webedit.server.WebeditService.service(WebeditService.java:77)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:598)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1367)
at de.espirit.firstspirit.io.servlet.WebAuthentication.doChain(WebAuthentication.java:672)
at de.espirit.firstspirit.webedit.server.ServiceAuthentication.doChain(ServiceAuthentication.java:27)
at de.espirit.firstspirit.io.servlet.WebAuthentication.doFilter(WebAuthentication.java:535)
at de.espirit.firstspirit.io.servlet.WebAuthentication.doFilter(WebAuthentication.java:151)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1338)
at de.espirit.firstspirit.webedit.server.BrowserCachingFilter.doFilter(BrowserCachingFilter.java:33)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1338)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:484)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:524)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:233)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1065)
at de.espirit.firstspirit.server.jetty.JettyManagerImpl$FailSafeWebAppContext.doHandle(JettyManagerImpl.java:839)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:413)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:192)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:999)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)
at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:250)
at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:149)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:111)
at org.eclipse.jetty.server.Server.handle(Server.java:350)
at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:454)
at org.eclipse.jetty.server.AbstractHttpConnection.content(AbstractHttpConnection.java:900)
at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:954)
at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:851)
at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235)
at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:77)
at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:606)
at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:46)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:603)
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:538)
at java.lang.Thread.run(Thread.java:744)
Caused by: java.lang.NoClassDefFoundError: de/espirit/firstspirit/webedit/server/gadgets/GwtServerGadgetFactory
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at de.espirit.firstspirit.server.module.ExtendedUrlClassLoader.findClass(ExtendedUrlClassLoader.java:90)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at de.espirit.firstspirit.server.module.MutableClassLoader.findClass(MutableClassLoader.java:129)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at java.lang.ClassLoader.loadClass(ClassLoader.java:412)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at de.espirit.firstspirit.server.module.MutableClassLoader.loadClass(MutableClassLoader.java:121)
at de.espirit.firstspirit.module.GadgetSpecification.getGadgetFactory(GadgetSpecification.java:108)
at de.espirit.firstspirit.webedit.server.gadgets.GwtServerGadgets.create(GwtServerGadgets.java:115)
at de.espirit.firstspirit.webedit.server.gadgets.ValueSerializingGwtServerGadgetMediator.<init>(ValueSerializingGwtServerGadgetMediator.java:114)
at de.espirit.firstspirit.webedit.server.gadgets.ValueSerializingGwtServerGadgetMediator._create(ValueSerializingGwtServerGadgetMediator.java:144)
at de.espirit.firstspirit.webedit.server.gadgets.ValueSerializingGwtServerGadgetMediator.create(ValueSerializingGwtServerGadgetMediator.java:137)
at de.espirit.firstspirit.webedit.server.gadgets.GwtServerGadgetMediatorFactory.create(GwtServerGadgetMediatorFactory.java:27)
at de.espirit.firstspirit.webedit.server.gadgets.AggregatingGwtServerGadgetMediator.getMediators(AggregatingGwtServerGadgetMediator.java:165)
at de.espirit.firstspirit.webedit.server.gadgets.AggregatingGwtServerGadgetMediator.load(AggregatingGwtServerGadgetMediator.java:113)
at de.espirit.firstspirit.webedit.server.gadgets.GwtFormControl.load(GwtFormControl.java:54)
at de.espirit.firstspirit.webedit.server.forms.FormSessionManager.loadSession(FormSessionManager.java:218)
at de.espirit.firstspirit.webedit.server.forms.StoreElementFormServiceImpl.loadForm(StoreElementFormServiceImpl.java:113)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at de.espirit.firstspirit.webedit.server.control.PollSupportingWebeditService$RPCInvoke.call(PollSupportingWebeditService.java:183)
at de.espirit.firstspirit.webedit.server.control.PollSupportingWebeditService$ServiceCallPollFeedWrapper.call(PollSupportingWebeditService.java:296)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
... 1 more
Caused by: java.lang.ClassNotFoundException: de.espirit.firstspirit.webedit.server.gadgets.GwtServerGadgetFactory
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at de.espirit.firstspirit.server.module.ExtendedUrlClassLoader.findClass(ExtendedUrlClassLoader.java:90)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 38 more
Grüße und Danke für eure Hilfe oder Hinweise
Martin
Hallo Martin,
>Die Jar (fs-webedit.jar) die diese Klasse beinhaltet liegt aber im WebEdit Context des Projekts.
ist diese Datei wirklich aktuell? Hat sie also die Größe von 26.367.443 Bytes? Ggf. die Datei nochmal manuell überschreiben (aus dem bekannten FS-Downloadverzeichnis \updateFS50\5.0.425\misc\fs-webedit.jar oder aus {fs-server}/data/fslib/fs-webedit.jar)
Gruß,
Walter.
Hallo Walter,
danke für den Hinweis, leider gibt es die fs-webedit.jar nicht im misc Ordner nur die fs-webrt.jar.
Die Größe dieser Jar unterscheidet sich von meiner fs-webrt.jar (26.367.450), ich habe diese ausgetauscht aber leider ist das Problem noch vorhanden.
In dieser Jar Datei ist die angefordnerte Klasse auch nicht enthalten diese liegt in fs-webedit.jar nicht fs-webrt.jar.
Wenn ich die normale FS Combobox verwende funktioniert diese im WebEdit.
Ist eventuell eine Definition in dier module.xml falsch?
Werden eigene Eingabekomponenten in WebEdit unterstützt?
Module.xml:
<public>
<name>CMS_CUSTOM_INPUT_COMBOBOX</name>
<description>CUSTOM COMBOBOX Editor Comp</description>
<class>de.espirit.firstspirit.module.GadgetSpecification</class>
<resources>
<resource>lib/custom.jar</resource>
</resources>
<configuration>
<gom>de.custom.module.editors.comboBox.gom.TestGomCombobox</gom>
<factory>de.custom.module.editors.comboBox.factory.TestComboboxSwingGadgetFactory</factory>
<factory>de.custom.module.editors.comboBox.factory.TestComboboxServerGadgetFactory</factory>
<value>de.custom.module.editors.comboBox.value.TestComboboxEditorValueImpl</value>
<scope data="yes" content="yes" link="yes" style="yes" />
</configuration>
</public>
Grüße
Martin
Hallo,
Frage an e-spirit.
Werden denn eigene Eingabekomponenten im WebEdit bei FS5 überhaupt unterstützt?
Gruß
David
Hallo David,
Eingabekomponenten im WebEdit werden erst ab FirstSpirit 5.1 unterstützt. Die von dir verwendeten Klassen sind auch nicht in der API zu finden. Für 5.1 gibt es eine entsprechende API dafür.
Gibt es für die Entwicklung von WebEdit Eingabekomponenten für FS 5.1 eine Dokumentation / ein Tutorial / ein Handbuch, und wenn ja, kannst du dieses Verlinken?
Gruß
Mathias
Eine Dokumentation steht leider noch nicht zu Verfügung. Die Eigenentwicklung lässt sich nur zum Teil in Java realisieren, daher ist die API hier eine andere, als für die standardmäßig bereitgestellten Gadgets.
Falls dringend Handlungsbedarf besteht, eigene Gadgets für den ContentCreator zu erstellen, bitte den verantwortlichen Projektleiter / Kontakt bei e-Spirit ansprechen, um eine Lösung zu finden.
Beste Grüße
Stefan
Hallo zusammen,
ist eine Dokumentation mittlerweile veröffentlicht?
Viele Grüße
Stefan Müller
Hallo,
ja, es gibt Dokumentation zum Thema. Die findet sich im ODFS im Unterpunkt zur Plugin-Entwicklung/Universelle Erweiterungen/Eingabekomponenten/ContentCreator-Gadget. Online zu finden hier:
http://www.e-spirit.com/odfs52/plugin-entwickl/universelle-erw/eingabekomponen/contentcreator/
Falls die Dokumentation nicht ausreicht, bitte nachfragen.
Beste Grüße
Stefan