View Full Version : [CLOSED] [GXT3 Beta2]: Solve Caused by: java.lang.NoClassDefFoundError: org/json/JSONObject

1 Feb 2012, 10:26 AM
Hi eveyone,

not an actual bug (I think), but something I had a major problems. If the following code was run in developer mode, clicking on the "Send" button produced a long error stack trace. Within the stack trace the following problem was described: Caused by: java.lang.NoClassDefFoundError: org/json/JSONObject.

Solution: Include gwt-servlet-deps.jar explicitely to the build path
(see http://stackoverflow.com/questions/6378908/gwt-autobeans-noclassdeffounderror-what-am-i-doing-wrong)

The file is located (for my installation) in:
%Program Files%\eclipse_3.7_SR1_indigo\eclipse\plugins\com.google.gwt.eclipse.sdkbundle_2.4.0.v201201120043-rel-r37\gwt-2.4.0

Used code:

* Entry point classes define <code>onModuleLoad()</code>.
public class LearningGXT3 implements EntryPoint {
public interface Role {
long getId();

void setId(long id);

String getName();

void setName(String name);

interface RoleProperties extends PropertyAccess<Role> {
ModelKeyProvider<Role> key();

ValueProvider<Role, Long> id();

ValueProvider<Role, String> name();

public interface RoleAutoBeanFactory extends AutoBeanFactory {
AutoBean<RecordResult> items();
AutoBean<ListLoadConfig> loadConfig();

* Defines the structure of the root JSON object being returned by the server.
* This class is needed as we cannot return a list of objects. Instead, we
* return a single object with a single property that contains the data
* records.
public interface RecordResult {
List<Role> getRecords();

class DataRecordJsonReader extends JsonReader<ListLoadResult<Role>, RecordResult> {
public DataRecordJsonReader(AutoBeanFactory factory, Class<RecordResult> rootBeanType) {
super(factory, rootBeanType);

protected ListLoadResult<Role> createReturnData(Object loadConfig, RecordResult incomingData) {
return new ListLoadResultBean<Role>(incomingData.getRecords());

* This is the entry point method.
public void onModuleLoad() {
RoleAutoBeanFactory factory = GWT.create(RoleAutoBeanFactory.class);

DataRecordJsonReader reader = new DataRecordJsonReader(factory, RecordResult.class);

String path = "http://<server>/roles.asmx/getItemsGXT3";
RequestBuilder builder = new RequestBuilder(RequestBuilder.POST, path);
builder.setHeader("content-type", "application/json");

HttpProxy<ListLoadConfig> proxy = new HttpProxy<ListLoadConfig>(builder);
// Create JSON
proxy.setWriter(new JsonWriter<ListLoadConfig>(factory, ListLoadConfig.class));

final ListLoader<ListLoadConfig, ListLoadResult<Role>> loader =
new ListLoader<ListLoadConfig, ListLoadResult<Role>>(proxy, reader);

RoleProperties props = GWT.create(RoleProperties.class);

ListStore<Role> store = new ListStore<Role>(props.key());

ColumnConfig<Role, Long> cc1 = new ColumnConfig<Role, Long>(props.id(), 100, "ID");
ColumnConfig<Role, String> cc2 = new ColumnConfig<Role, String>(props.name(), 100, "Name");

List<ColumnConfig<Role, ?>> l = new ArrayList<ColumnConfig<Role, ?>>();
ColumnModel<Role> cm = new ColumnModel<Role>(l);

Grid<Role> view = new Grid<Role>(store, cm);

Button sendButton = new Button("Send");
sendButton.addClickHandler(new ClickHandler() {

public void onClick(ClickEvent event) {

// We can add style names to widgets

// Add the nameField and sendButton to the RootPanel
// Use RootPanel.get() to get the entire body element

If there is a better way to solve this issue: Any hints are appreciated.


1 Feb 2012, 2:21 PM

I ran into the same issue. I then checked the WEB-INF/lib directory of the examples war (gxt-examples-3.0.0-beta1.war) and noticed the JSON jar (json-20090211.jar). So I updated my POM to include the gwt-servlet-deps dependency:

<artifactId>gwt-servlet-deps</artifactId> <!-- required for AutoBean support -->

Your approach is fine.