GWT and GeoTools Servlet problem

77 views
Skip to first unread message

Jon Britton

unread,
Mar 31, 2010, 6:16:14 AM3/31/10
to Google Web Toolkit
Hi,

I've got a servlet which uses the GeoTools library to contact a remote
server and parse the XML, it then returns the results to the browser
client.

I've got a button on the client side which initiates the call to the
servlet. When I click this button the first time, I get an
ClassCastException. However, when I click it a second time everything
works fine!

I don't think this is a problem with GeoTools as it works perfectly
fine when I do a similar thing locally. My first assumption was that
GWT wasn't finding the necessary classes the first time around, but
had them ready for the second time. However I've added all the
required jars to my WEB-INF/lib folder and I still get the same
problem.

Something must be happening between the first and second server call
to make it work, but I don't know what it could be. Maybe GWT is
loading some required class or jar and not telling me about it?

I've included my stack trace and servlet code snippet below, although
I don't know how much use they'll be...

Any help would be appreciated.

Thanks,

Jon


STACK TRACE:

Starting Jetty on port 8888
[WARN] Exception while dispatching incoming RPC call
com.google.gwt.user.server.rpc.UnexpectedException: Service method
'public abstract java.util.ArrayList
uk.ac.glam.wps.gwtwps.client.OWSRequestService.wpsGetCapabilities(java.lang.String)'
threw an unexpected exception: java.lang.RuntimeException: Parsing
failed for ProviderSite: java.lang.RuntimeException: Unable to set
property: href for eobject: {http://www.opengis.net/ows/1.1}
OnlineResourceType
at
com.google.gwt.user.server.rpc.RPC.encodeResponseForFailure(RPC.java:
378)
at
com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:
581)
at
com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:
188)
at
com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:
224)
at
com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:
62)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:713)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:
487)
at
org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:
362)
at
org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:
216)
at
org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:
181)
at
org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:
729)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:
405)
at
org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:
152)
at
org.mortbay.jetty.handler.RequestLogHandler.handle(RequestLogHandler.java:
49)
at
org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:
152)
at org.mortbay.jetty.Server.handle(Server.java:324)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:
505)
at org.mortbay.jetty.HttpConnection
$RequestHandler.content(HttpConnection.java:843)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:647)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
at
org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:
396)
at org.mortbay.thread.QueuedThreadPool
$PoolThread.run(QueuedThreadPool.java:488)
Caused by: java.lang.RuntimeException: Parsing failed for
ProviderSite: java.lang.RuntimeException: Unable to set property: href
for eobject: {http://www.opengis.net/ows/1.1}OnlineResourceType
at org.geotools.xml.impl.ParseExecutor.visit(ParseExecutor.java:158)
at org.geotools.xml.impl.BindingWalker
$BindingExecutionChain.execute(BindingWalker.java:212)
at org.geotools.xml.impl.BindingWalker.walk(BindingWalker.java:178)
at
org.geotools.xml.impl.ElementHandlerImpl.endElement(ElementHandlerImpl.java:
222)
at org.geotools.xml.impl.ParserHandler.endElement(ParserHandler.java:
607)
at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown
Source)
at
org.apache.xerces.parsers.AbstractXMLDocumentParser.emptyElement(Unknown
Source)
at
org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown
Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl
$FragmentContentDispatcher.dispatch(Unknown Source)
at
org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown
Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
at org.geotools.xml.Parser.parse(Parser.java:223)
at org.geotools.xml.Parser.parse(Parser.java:151)
at
org.geotools.data.wps.response.WPSGetCapabilitiesResponse.<init>(WPSGetCapabilitiesResponse.java:
59)
at
org.geotools.data.wps.WPS1_0_0$GetCapsRequest.createResponse(WPS1_0_0.java:
110)
at
org.geotools.data.ows.AbstractWPS.internalIssueRequest(AbstractWPS.java:
419)
at
org.geotools.data.wps.WebProcessingService.issueRequest(WebProcessingService.java:
231)
at
org.geotools.data.ows.AbstractWPS.negotiateVersion(AbstractWPS.java:
219)
at org.geotools.data.ows.AbstractWPS.<init>(AbstractWPS.java:86)
at
org.geotools.data.wps.WebProcessingService.<init>(WebProcessingService.java:
174)
at
uk.ac.glam.wps.gwtwps.server.OWSRequestServiceImpl.wpsGetCapabilities(OWSRequestServiceImpl.java:
33)
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
com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:
562)
... 22 more
Caused by: java.lang.RuntimeException: Unable to set property: href
for eobject: {http://www.opengis.net/ows/1.1}OnlineResourceType
at
org.geotools.xml.AbstractComplexEMFBinding.setProperty(AbstractComplexEMFBinding.java:
286)
at
org.geotools.xml.AbstractComplexEMFBinding.setProperties(AbstractComplexEMFBinding.java:
211)
at
org.geotools.xml.AbstractComplexEMFBinding.parse(AbstractComplexEMFBinding.java:
145)
at org.geotools.xml.impl.ParseExecutor.visit(ParseExecutor.java:149)
... 50 more
Caused by: java.lang.ClassCastException: class
org.geotools.util.CommonsConverterFactory
at java.lang.Class.asSubclass(Class.java:3018)
at org.geotools.factory.FactoryRegistry.register(FactoryRegistry.java:
866)
at
org.geotools.factory.FactoryRegistry.scanForPlugins(FactoryRegistry.java:
773)
at
org.geotools.factory.FactoryRegistry.scanForPluginsIfNeeded(FactoryRegistry.java:
808)
at
org.geotools.factory.FactoryRegistry.getServiceProviders(FactoryRegistry.java:
195)
at org.geotools.util.Converters.getConverterFactories(Converters.java:
86)
at org.geotools.util.Converters.factories(Converters.java:184)
at org.geotools.util.Converters.convert(Converters.java:154)
at org.geotools.util.Converters.convert(Converters.java:123)
at
org.geotools.xml.AbstractComplexEMFBinding.convert(AbstractComplexEMFBinding.java:
300)
at
org.geotools.xml.AbstractComplexEMFBinding.setProperty(AbstractComplexEMFBinding.java:
241)
... 53 more
[ERROR] 500 - POST /gwtwps/ows (127.0.0.1) 57 bytes
Request headers
Host: 127.0.0.1:8888
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US)
AppleWebKit/533.2 (KHTML, like Gecko) Chrome/5.0.342.8 Safari/533.2
Referer: http://127.0.0.1:8888/gwtwps/hosted.html?gwtwps
Accept: */*
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Content-Length: 260
Origin: http://127.0.0.1:8888
X-GWT-Module-Base: http://127.0.0.1:8888/gwtwps/
Content-Type: text/x-gwt-rpc; charset=utf-8
X-GWT-Permutation: HostedMode
Response headers
Content-Type: text/plain
com.google.gwt.user.client.rpc.StatusCodeException: The call failed on
the server; see server log for details
at
com.google.gwt.user.client.rpc.impl.RequestCallbackAdapter.onResponseReceived(RequestCallbackAdapter.java:
192)
at
com.google.gwt.http.client.Request.fireOnResponseReceived(Request.java:
287)
at com.google.gwt.http.client.RequestBuilder
$1.onReadyStateChange(RequestBuilder.java:393)
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 com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:
103)
at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:
71)
at
com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:
157)
at
com.google.gwt.dev.shell.BrowserChannel.reactToMessagesWhileWaitingForReturn(BrowserChannel.java:
1713)
at
com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:
165)
at
com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:
120)
at com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:
507)
at
com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:
264)
at
com.google.gwt.dev.shell.JavaScriptHost.invokeNativeObject(JavaScriptHost.java:
91)
at com.google.gwt.core.client.impl.Impl.apply(Impl.java)
at com.google.gwt.core.client.impl.Impl.entry0(Impl.java:188)
at sun.reflect.GeneratedMethodAccessor10.invoke(Unknown Source)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:
25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:
103)
at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:
71)
at
com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:
157)
at
com.google.gwt.dev.shell.BrowserChannel.reactToMessages(BrowserChannel.java:
1668)
at
com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:
401)
at
com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:
222)
at java.lang.Thread.run(Thread.java:619)


SERVLET CODE:

public ArrayList<ProcessDescriptor> wpsGetCapabilities(final String
url) {
System.out.println("In wpsGetCapabilities with url " + url);

ArrayList<ProcessDescriptor> processDescriptors = new
ArrayList<ProcessDescriptor>();

WebProcessingService wps;
try {
wps = new WebProcessingService(new URL("http://localhost:8080/wps/
WebProcessingService?Service=WPS&Request=GetCapabilities"));
WPSCapabilitiesType capabilities = wps.getCapabilities();

EList processes = capabilities.getProcessOfferings().getProcess();
for (Iterator<ProcessBriefType> iterator = processes.iterator();
iterator.hasNext();) {
ProcessBriefType object = (ProcessBriefType) iterator.next();
processDescriptors.add(WPSAdapter.processBriefAdapter(object));
System.out.println(object.getIdentifier().getValue());
}
} catch (ServiceException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

return processDescriptors;
}

Jon Britton

unread,
Mar 31, 2010, 7:16:36 AM3/31/10
to Google Web Toolkit
I've just thought - could it be that Jetty is not loading up properly
in time for my request? Is there any way to get it to load before the
first request is made?

Cheers,

Jon

On Mar 31, 11:16 am, Jon Britton <mankillseveryth...@googlemail.com>
wrote:

Reply all
Reply to author
Forward
0 new messages