Google Web Tools (GWT) - Application Migration Example

Microservices with GWT

Implementing a simple GWT service and exposing it as a REST API using gwt-sl-1.7.jar

Consuming the GWT service #1 from REST microservice.



Implementing GWT Service as REST api:


Implementing GWT Service as REST api:

Using GWT SL library, GWT service can be exposed as a rest api by simply implementing the gwt application stub interface as shown below and providing handler servlet mapping

GWT service class Implementing stub interface:

GWT Service as REST url mapping

URL mapping the above service in the Handler Servlet xml.

gwt rpc application hosting on apache tomcat

Once service creation and mapping is done, build the project to create a war file, here we are hosting on Apache tomcat:


gwt rpc application testing using postman


Once the GWT app is up and running, we can test the same from postman. ( In the case, service returns Country name from postgres database)

GWT API URL: http://localhost:8080/GWT_RPC_SL-1.0-SNAPSHOT/handler/service


gwt rest controller



Consuming the GWT service from REST service.

We can consume the gwt service exposed as rest api above, from a microservice (/callrpc) as shown below.



Post man:





Note: GWT rpc request and response format




You can download the request and response format here :
Download



5| {GWT SERIALIZATION_STREAM_VERSION}

0|{flags}

7|{number of string table elements}


1http://192.168.105.139/ecs/emh/|{path - this is the first string table element}

297C4ECAB71FD06CAF1EED4DEAF352460|{whitelist hash*}

3com.ecs.emh.client.service.interfaces.IUserService|{service interface FQN}

4getListOfPatients|{method name}

5java.lang.Long|{Long}

6I|{int}

7java.lang.Long/4227064769|{type serialization signature**}


1|2|3|4|{service url endpoint, hash, interface and method definition - positions in str table}

3|{number of method parameters}

5|{first method parameter type - position in str table} - Long

6|{second method parameter type - position in str table} - int

6|{third method parameter type - position in str table} - int


7|{first param's type serialization signature - position in str table}

2|{first param's value}

0| + {first param's value} - Long params are represented by two payload elements (sum of)

0|{second param's value}

1|{third param's value}



whitelist hash *:[The hash is used to load the whitelist of objects that can be deserialized.

url/hash.gwt.rpc is a viewable url,

that may provide some useful insight about the datatypes used by the GWT application.]

type serialization signature **:[The signature ensures that both the client and server are working on the same instance of the class.

Similar to serialVersionUID, but generated using type members (crc).

If the signature sent by the client does not match the server’s signature for the class,

the server will throw an IncompatibleRemoteServiceException]

I - int

Z - boolean

J - long

D - double

F - float

B - byte

S - short

C char



Migration Know Issues:



1. XSRF Attack


			
			   [WARN] Exception while dispatching incoming RPC call
java.lang.SecurityException: Blocked request without GWT permutation header (XSRF attack?)
	at com.google.gwt.user.server.rpc.RemoteServiceServlet.checkPermutationStrongName(RemoteServiceServlet.java:397)
	at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:292)
	at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:373)
	at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
	at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:812)
	at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:587)
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
	at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:577)
	at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:223)
	at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127)
	at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515)
	at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)
	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061)
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
	at org.eclipse.jetty.server.handler.RequestLogHandler.handle(RequestLogHandler.java:95)
	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
	at org.eclipse.jetty.server.Server.handle(Server.java:499)
	at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:311)
	at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257)
	at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:544)
	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)
	at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)
	at java.lang.Thread.run(Thread.java:745)
[ERROR] 500 - POST /sv_gwt_poc_v1/greet (127.0.0.1) 57 bytes
   Request headers
      Host: localhost:8888
      Connection: keep-alive
      Content-Length: 0
      sec-ch-ua: "Google Chrome";v="89", "Chromium";v="89", ";Not A Brand";v="99"
      Cache-Control: no-cache
      Content-Type: text/x-gwt-rpc;charset=UTF-8
      sec-ch-ua-mobile: ?0
      User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36
      Postman-Token: 71e62ad5-af19-7ed9-3a38-51d0d1748ba4
      Accept: */*
      Origin: chrome-extension://fhbjgbiflinjbdggehcddcbncdddomop
      Sec-Fetch-Site: none
      Sec-Fetch-Mode: cors
      Sec-Fetch-Dest: empty
      Accept-Encoding: gzip, deflate, br
      Accept-Language: en-US,en;q=0.9
   Response headers
      Content-Type: text/plain

			
			

2. GWT Client Error


			
			2021-05-06 13:13:30 [http-nio-8989-exec-1] DEBUG o.s.o.j.s.OpenEntityManagerInViewInterceptor - Opening JPA EntityManager in OpenEntityManagerInViewInterceptor 
java.lang.UnsupportedOperationException: ERROR: GWT.create() is only usable in client code!  It cannot be called, for example, from server code.  If you are running a unit test, check that your test case extends GWTTestCase and that GWT.create() is not called from within an initializer or constructor.
	at com.google.gwt.core.shared.GWT.createImpl(GWT.java:77)
	at com.google.gwt.core.client.GWT.create(GWT.java:86)
	at com.cts.sv.resource.mgmt.controller.RPCServiceController.callRpcService(RPCServiceController.java:33)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
	at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197)
	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141)
	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:893)
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:807)
	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1061)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:961)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:497)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:584)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:93)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.base/java.lang.Thread.run(Thread.java:834)
2021-05-06 13:13:30 [http-nio-8989-exec-1] DEBUG o.s.w.s.m.m.a.RequestResponseBodyMethodProcessor - Using 'text/plain', given [*/*] and supported [text/plain, */*, text/plain, */*, application/json, application/*+json, application/json, application/*+json, application/xml;charset=UTF-8, text/xml;charset=UTF-8, application/*+xml;charset=UTF-8, application/xml;charset=UTF-8, text/xml;charset=UTF-8, application/*+xml;charset=UTF-8] 
2021-05-06 13:13:30 [http-nio-8989-exec-1] DEBUG o.s.w.s.m.m.a.RequestResponseBodyMethodProcessor - Writing ["An error occurred while attempting to contact the server. Please check your network connection and  (truncated)...] 
2021-05-06 13:13:30 [http-nio-8989-exec-1] DEBUG o.s.o.j.s.OpenEntityManagerInViewInterceptor - Closing JPA EntityManager in OpenEntityManagerInViewInterceptor 
2021-05-06 13:13:30 [http-nio-8989-exec-1] DEBUG o.s.w.s.DispatcherServlet - Completed 200 OK 
2021-05-06 13:13:30 [http-nio-8989-exec-1] DEBUG o.a.c.h.Http11InputBuffer - Before fill(): [true], parsingRequestLine: [true], parsingRequestLinePhase: [0], parsingRequestLineStart: [0], byteBuffer.position() [0] 
2021-05-06 13:13:30 [http-nio-8989-exec-1] DEBUG o.a.t.u.n.SocketWrapperBase - Socket: [org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper@6cb7dbea:org.apache.tomcat.util.net.NioChannel@256dc5db:java.nio.channels.SocketChannel[connected local=/0:0:0:0:0:0:0:1:8989 remote=/0:0:0:0:0:0:0:1:50672]], Read from buffer: [0] 
2021-05-06 13:13:30 [http-nio-8989-exec-1] DEBUG o.a.t.u.n.NioEndpoint - Socket: [org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper@6cb7dbea:org.apache.tomcat.util.net.NioChannel@256dc5db:java.nio.channels.SocketChannel[connected local=/0:0:0:0:0:0:0:1:8989 remote=/0:0:0:0:0:0:0:1:50672]], Read direct from socket: [0] 
2021-05-06 13:13:30 [http-nio-8989-exec-1] DEBUG o.a.c.h.Http11InputBuffer - Received [] 
2021-05-06 13:13:30 [http-nio-8989-exec-1] DEBUG o.a.c.h.Http11Processor - Socket: [org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper@6cb7dbea:org.apache.tomcat.util.net.NioChannel@256dc5db:java.nio.channels.SocketChannel[connected local=/0:0:0:0:0:0:0:1:8989 remote=/0:0:0:0:0:0:0:1:50672]], Status in: [OPEN_READ], State out: [OPEN] 
2021-05-06 13:13:30 [http-nio-8989-exec-1] DEBUG o.a.c.h.Http11NioProtocol - Pushed Processor [org.apache.coyote.http11.Http11Processor@469e116d] 
2021-05-06 13:13:30 [http-nio-8989-exec-1] DEBUG o.a.t.u.n.NioEndpoint - Registered read interest for [org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper@6cb7dbea:org.apache.tomcat.util.net.NioChannel@256dc5db:java.nio.channels.SocketChannel[connected local=/0:0:0:0:0:0:0:1:8989 remote=/0:0:0:0:0:0:0:1:50672]] 
2021-05-06 13:13:31 [http-nio-8989-ClientPoller] DEBUG o.a.t.u.n.NioEndpoint - timeout completed: keys processed=1; now=1620287011655; nextExpiration=1620287011287; keyCount=0; hasEvents=false; eval=false 
2021-05-06 13:13:32 [http-nio-8989-ClientPoller] DEBUG o.a.t.u.n.NioEndpoint - timeout completed: keys processed=1; now=1620287012661; nextExpiration=1620287012655; keyCount=0; hasEvents=false; eval=false 




3. Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded in GWT application



GWT artifact build / rebuild creating a lot of errors shown below in the picture. And build is failing with
OutOfMemoryError error.

Building GWT fails with OutOfMemoryError




4. java.lang.ClassNotFoundException: com.google.gwt.user.client.rpc.RemoteService


When deploying Google Web Tools - GWT Application war file in Tomcat 6, We might get ClassNotFoundException as shown below



java.lang.ClassNotFoundException: com.google.gwt.user.client.rpc.RemoteService

java.lang.NoClassDefFoundError: com/google/gwt/user/client/rpc/RemoteService

root cause

java.lang.ClassNotFoundException: com.google.gwt.user.client.rpc.RemoteService



5. GWT ClassCastException in RCP method while get data from DB



In several times, after deploying on glassfish, we have an exception:

SEVERE|glassfishv3.0|javax.enterprise.system.std.com.sun.enterprise.v3.services.impl|_ThreadID=40;_ThreadName=Thread-1;|java.lang.ClassCastException: com.gwt.server.domain.model.OrgUnit cannot be cast to com.gwt.server.domain.model.OrgUnit

Stackstrace:

SEVERE|glassfishv3.0|javax.enterprise.system.std.com.sun.enterprise.v3.services.impl|_ThreadID=40;_ThreadName=Thread-1;|java.lang.ClassCastException: com.gwt.server.domain.model.OrgUnit cannot be cast to com.gwt.server.domain.model.OrgUnit
    at com.gwt.server.service.orgUnit.OrgUnitServiceImpl$1.execute(OrgUnitServiceImpl.java:51)
    at com.gwt.server.service.orgUnit.OrgUnitServiceImpl$1.execute(OrgUnitServiceImpl.java:40)
    at com.gwt.server.service.api.AbstractCommand.invoke(AbstractCommand.java:56)
    at com.gwt.server.service.orgUnit.OrgUnitServiceImpl.findAll(OrgUnitServiceImpl.java:39)
    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:569)
    at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:208)
    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:754)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
    at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
    at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:332)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:233)
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)
    at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
    at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
    at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
    at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
    at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
    at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
    at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
    at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
    at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
    at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
    at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
    at java.lang.Thread.run(Thread.java:619)

6. GWT GiLead Hibernate IllegalArgumentException while trying to send LightEntity throw wire


GWT rpc call fails with the following exception while saving entities

[WARN] Exception while dispatching incoming RPC call
java.lang.RuntimeException: java.lang.IllegalArgumentException: argument type mismatch
    at net.sf.gilead.core.beanlib.merge.MergePropertyFilter.propagate(MergePropertyFilter.java:230)
    at net.sf.beanlib.provider.BeanPopulator.doit(BeanPopulator.java:186)
    at net.sf.beanlib.provider.BeanPopulator.processSetterMethod(BeanPopulator.java:172)
    at net.sf.beanlib.provider.BeanPopulator.populate(BeanPopulator.java:269)
    at net.sf.gilead.core.LazyKiller.populate(LazyKiller.java:288)
    at net.sf.gilead.core.LazyKiller.attach(LazyKiller.java:237)
    at net.sf.gilead.core.PersistentBeanManager.mergePojo(PersistentBeanManager.java:554)
    at net.sf.gilead.core.PersistentBeanManager.merge(PersistentBeanManager.java:318)
    at net.sf.gilead.core.PersistentBeanManager.mergeCollection(PersistentBeanManager.java:581)
    at net.sf.gilead.core.PersistentBeanManager.merge(PersistentBeanManager.java:290)
    at net.sf.gilead.gwt.GileadRPCHelper.parseInputParameters(GileadRPCHelper.java:94)
    at net.sf.gilead.gwt.GileadRPCHelper.parseInputParameters(GileadRPCHelper.java:137)
    at net.sf.gilead.gwt.PersistentRemoteService.processCall(PersistentRemoteService.java:172)
    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:637)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    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:395)
    at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488)
Caused by: java.lang.IllegalArgumentException: argument type mismatch
    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 net.sf.gilead.core.beanlib.merge.MergePropertyFilter.writePropertyValue(MergePropertyFilter.java:285)
    at net.sf.gilead.core.beanlib.merge.MergePropertyFilter.propagate(MergePropertyFilter.java:179)