Hello, I am trying to create custom widget in gwt to use in vaadin, but I can’t seems to deploy war in tomcat.
If I try it now, I get this error when war loads up:
org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Failed to read candidate component class: file [C:\Users\Peter\Documents\bach-dataframe\TomcatDeploy\wtpwebapps\locations-ui\WEB-INF\classes\cz\bach\common_sources\locations\ui\widgetset\client\ui\MapyCZWidget.class]
; nested exception is java.io.FileNotFoundException: class path resource [com/google/gwt/user/client/ui/Composite.class]
cannot be opened because it does not exist
Offending resource: file [C:\Users\Peter\Documents\bach-dataframe\TomcatDeploy\wtpwebapps\locations-ui\WEB-INF\classes\META-INF\spring\application-context.xml]
; nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: file [C:\Users\Peter\Documents\bach-dataframe\TomcatDeploy\wtpwebapps\locations-ui\WEB-INF\classes\cz\bach\common_sources\locations\ui\widgetset\client\ui\MapyCZWidget.class]
; nested exception is java.io.FileNotFoundException: class path resource [com/google/gwt/user/client/ui/Composite.class]
cannot be opened because it does not exist
at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:68)
at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:85)
at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:76)
at org.springframework.data.repository.config.RepositoryBeanDefinitionParser.handleError(RepositoryBeanDefinitionParser.java:82)
at org.springframework.data.repository.config.RepositoryBeanDefinitionParser.parse(RepositoryBeanDefinitionParser.java:75)
at org.springframework.beans.factory.xml.NamespaceHandlerSupport.parse(NamespaceHandlerSupport.java:73)
at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1419)
at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1409)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:184)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:140)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:111)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:493)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:390)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:174)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:209)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:180)
at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:125)
at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:94)
at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:131)
at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:522)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:436)
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:385)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:284)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:111)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4701)
at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5204)
at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5199)
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)
Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: file [C:\Users\Peter\Documents\bach-dataframe\TomcatDeploy\wtpwebapps\locations-ui\WEB-INF\classes\cz\bach\common_sources\locations\ui\widgetset\client\ui\MapyCZWidget.class]
; nested exception is java.io.FileNotFoundException: class path resource [com/google/gwt/user/client/ui/Composite.class]
cannot be opened because it does not exist
at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.findCandidateComponents(ClassPathScanningCandidateComponentProvider.java:261)
at org.springframework.data.repository.config.RepositoryConfigurationSourceSupport.getCandidates(RepositoryConfigurationSourceSupport.java:53)
at org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport.getRepositoryConfigurations(RepositoryConfigurationExtensionSupport.java:53)
at org.springframework.data.repository.config.RepositoryBeanDefinitionParser.parse(RepositoryBeanDefinitionParser.java:67)
... 29 more
Caused by: java.io.FileNotFoundException: class path resource [com/google/gwt/user/client/ui/Composite.class]
cannot be opened because it does not exist
at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:158)
at org.springframework.core.type.classreading.SimpleMetadataReader.<init>(SimpleMetadataReader.java:45)
at org.springframework.core.type.classreading.SimpleMetadataReaderFactory.getMetadataReader(SimpleMetadataReaderFactory.java:80)
at org.springframework.core.type.classreading.CachingMetadataReaderFactory.getMetadataReader(CachingMetadataReaderFactory.java:101)
at org.springframework.core.type.classreading.SimpleMetadataReaderFactory.getMetadataReader(SimpleMetadataReaderFactory.java:76)
at org.springframework.core.type.filter.AbstractTypeHierarchyTraversingFilter.match(AbstractTypeHierarchyTraversingFilter.java:105)
at org.springframework.core.type.filter.AbstractTypeHierarchyTraversingFilter.match(AbstractTypeHierarchyTraversingFilter.java:76)
at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.isCandidateComponent(ClassPathScanningCandidateComponentProvider.java:304)
at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.findCandidateComponents(ClassPathScanningCandidateComponentProvider.java:238)
... 32 more
which would suggest that I need to include gwt-user dependency, but that will fail to load altogether because of javax servlet jar validation problem.
What should I do?
Here is my custom widget:
public class MapyCZWidget extends Composite implements MapWidget {
private static HeadElement head;
public static final String CLASSNAME = "mapy-cz-widget";
private static final String MAPY_CZ_SOURCE_API_V4 = "http://api4.mapy.cz/loader.js";
private static final String MAPY_CZ_INIT_API_V4 = "Loader.load()";
private static final String MAPY_CZ_ID = "mapy.cz-insert-element";
public static void injectScriptSource(String source){
HeadElement head = getHead();
ScriptElement element = createScriptElement();
element.setSrc(source);
head.appendChild(element);
}
public static void inject(String javascript) {
HeadElement head = getHead();
ScriptElement element = createScriptElement();
element.setText(javascript);
head.appendChild(element);
}
private static ScriptElement createScriptElement() {
ScriptElement script = Document.get().createScriptElement();
script.setAttribute("language", "javascript");
return script;
}
private static synchronized HeadElement getHead() {
if (head == null) {
Element element = Document.get().getElementsByTagName("head").getItem(0);
assert element != null : "HTML Head element required";
HeadElement headElement = HeadElement.as(element);
head = headElement;
}
return head;
}
String uidlId;
ApplicationConnection client;
SimplePanel panel;
public MapyCZWidget(){
super();
inject(MAPY_CZ_SOURCE_API_V4);
inject(MAPY_CZ_INIT_API_V4);
setStyleName(CLASSNAME);
panel = new SimplePanel();
ScriptElement newScript = createScriptElement();
newScript.setAttribute("language", "javascript");
panel.add(new HTML("<div id=\""+ MAPY_CZ_ID +"\" style=\"width:100%; height:100%;\"></div>"));
initWidget(panel);
}
@Override
public native void setDoubleCoords(String element, double x, double y) /*-{
var stred = SMap.Coords.fromWGS84(x, y);
var mapa = new SMap(JAK.gel(element), stred, 10);
mapa.addDefaultLayer(SMap.DEF_BASE).enable();
mapa.addDefaultControls();
}-*/;
@Override
public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
if (client.updateComponent(this, uidl, true))
return;
this.client = client;
// Save the UIDL identifier for the component
uidlId = uidl.getId();
setDoubleCoords(MAPY_CZ_ID, uidl.getDoubleVariable("x"), uidl.getDoubleVariable("y"));
}
}