I’ve run through the Google Web Toolkit StockWatcher Tutorial using Eclipse and the Google Plugin, and I’m attempting to make some basic changes to it so I can better understand the RPC framework.
I’ve modified the “getStocks” method on the StockServiceImpl server-side class so that it returns an array of Stock objects instead of String objects. The application compiles perfectly, but the Google Web Toolkit is returning the following error:
“No source code is available for type com.google.gwt.sample.stockwatcher.server.Stock; did you forget to inherit a required module?”
It seems that the client-side classes can’t find an implementation of the Stock object, even though the class has been imported. For reference, here is a screenshot of my package hierarchy:
I suspect that I’m missing something in web.xml, but I have no idea what it is. Can anyone point me in the right direction?
EDIT: Forgot to mention that the Stock class is persistable, so it needs to stay on the server-side.


After much trial and error, I managed to find a way to do this. It might not be the best way, but it works. Hopefully this post can save someone else a lot of time and effort.
These instructions assume that you have completed both the basic StockWatcher tutorial and the Google App Engine StockWatcher modifications.
Create a Client-Side Implementation of the Stock Class
There are a couple of things to keep in mind about GWT:
Due to both items above, the client can never implement the Stock class that we created in com.google.gwt.sample.stockwatcher.server. Instead, we’ll create a new client-side Stock class called StockClient.
StockClient.java:
Modify Client Classes to Use StockClient[] instead of String[]
Now we make some simple modifications to the client classes so that they know that the RPC call returns StockClient[] instead of String[].
StockService.java:
StockServiceAsync.java:
StockWatcher.java:
Add one import:
All other code stays the same, except addStock, loadStocks, and displayStocks:
Modify the StockServiceImpl Class to Return StockClient[]
Finally, we modify the getStocks method of the StockServiceImpl class so that it translates the server-side Stock classes into client-side StockClient classes before returning the array.
StockServiceImpl.java
We need to change the addStock method slightly so that the generated ID is returned:
All other methods stay the same, except getStocks:
Summary
The code above works perfectly for me when deployed to Google App Engine, but triggers an error in Google Web Toolkit Hosted Mode:
Let me know if you encounter the same problem or not. The fact that it works in Google App Engine seems to indicate a bug in Hosted Mode.