Wednesday, 19 September 2012

java.lang.IllegalArgumentException: invoke arguments: JS value of type number, expected


Background of Problem

1 - My Ginjector is 

TGinInjector.java


@GinModules({ TModule.class })
public interface TGinInjector extends Ginjector {
PlaceManager getPlaceManager();

EventBus getEventBus();

TConstants getTConstants();

Provider<MainPagePresenter> getMainPagePresenter();

/*
* Statement Module
*/
AsyncProvider<TStatementPresenter> getTStatementPresenter();

AsyncProvider<StatementPresenter> getStatementPresenter();
}


2 - My PresenterModule is :
TModule.java


public class TModule extends AbstractPresenterModule {

@Override
protected void configure() {

bind(EventBus.class).to(SimpleEventBus.class).in(Singleton.class);
bind(TokenFormatter.class).to(ParameterTokenFormatter.class).in(
Singleton.class);
bind(RootPresenter.class).to(TRootPresenter.class)
.asEagerSingleton();
bind(PlaceManager.class).to(TPlaceManager.class).in(
Singleton.class);
bindConstant().annotatedWith(DefaultPlace.class).to(
NameTokens.STATEMENT);

bindPresenter(MainPagePresenter.class, IMainPageView.class,
MainPageView.class, MainPagePresenter.MainProxy.class);
/*
* Statement Module
*/
bindPresenter(
TStatementPresenter.class,
ITStatementView.class,
TStatementTabView.class,
TStatementPresenter.ITStatementTabContentProxy.class);

bindPresenter(StatementPresenter.class, IStatementView.class,
StatementView.class,
StatementPresenter.IStatementTabContentProxyPlace.class);

}

3 - My PlaceManagerImpl is 

TPlaceManager.java


public class TPlaceManager extends PlaceManagerImpl {

private final PlaceRequest defaultPlaceRequest;

@Inject
public TPlaceManager(EventBus eventBus, TokenFormatter tokenFormatter, @DefaultPlace String nameToken) {
super(eventBus, tokenFormatter);
defaultPlaceRequest = new PlaceRequest(nameToken);

}

@Override
public void revealDefaultPlace() {
revealPlace(defaultPlaceRequest);
}

}

4 - My TStatementPresenter for a Tab
TStatementPresenter.java


public class TStatementPresenter
extends
SubContainerPresenterBase<ITStatementView, TStatementPresenter.IStatementTabContentProxy>
implements ITStatementView.ITStatementUiHandlers {

@RequestTabs
public static final Type<RequestTabsHandler> TYPE_RequestTabsHandler = new Type<RequestTabsHandler>();
@ContentSlot
public static final Type<RevealContentHandler<?>> TYPE_SetTabContentHandler = new Type<RevealContentHandler<?>>();

@ProxyCodeSplit
public interface ITStatementTabContentProxy extends
TabContentProxy<TStatementPresenter> {
}

@Inject
public TStatementPresenter(EventBus eventBus, ITStatementView view,
ITStatementTabContentProxy proxy) {
super(eventBus, view, proxy, TYPE_SetTabContentHandler,
TYPE_RequestTabsHandler);
}

@TabInfo(container = MainPagePresenter.class, priority = 0, nameToken = NameTokens.T_STATEMENT)
static String getTabLabel(TGinInjector ginjector) {
return ginjector.getTConstants().tStatement();
}

@Override
protected void revealInParent() {
RevealContentEvent.fire(this, MainPagePresenter.TYPE_SetMainContent,
this);

}

}


5 - StatementPresenter.java for a subtab

/**
 * @author prayag
 * @date Sep 13, 2012
 */
public class StatementPresenter
extends
Presenter<IStatementView, StatementPresenter.IStatementTabContentProxyPlace>
implements IStatementView.IStatementUiHandlers {

@Inject
PlaceManager placeManager;

@RequestTabs
public static final Type<RequestTabsHandler> TYPE_RequestTabs = new
Type<RequestTabsHandler>();

@ContentSlot
public static final Type<RevealContentHandler<?>> TYPE_SetTabContent =
new Type<RevealContentHandler<?>>();

@Inject
public StatementPresenter(EventBus eventBus, IStatementView view,
IStatementTabContentProxyPlace proxy) {
super(eventBus, view, proxy);
getView().setUiHandlers(this);
}

@ProxyCodeSplit
@NameToken(NameTokens.STATEMENT)
public interface IStatementTabContentProxyPlace extends
TabContentProxyPlace<StatementPresenter> {

}

@TabInfo(container = TStatementPresenter.class)
static TabData getTabLabel(TGinInjector ginjector) {
return new TabDataBasic(ginjector.getTransconnectConstants()
.statement(), 0);
}

@Override
protected void revealInParent() {
RevealContentEvent.fire(this,
StatementPresenter.TYPE_SetTabContentHandler, this);
}

@TitleFunction
public String getTranslatedTitle(TGinInjector gInjector) {
return gInjector.getTConstants().statement();
}
}

ERROR
Stepwise I am getting following error in gwt  with StatementView not loading:

11:00:42.314 [ERROR] [t] Uncaught exception escaped
java.lang.IllegalArgumentException: invoke arguments: JS value of type number, expected com.google.gwt.core.client.Scheduler.RepeatingCommand
    at com.google.gwt.dev.shell.JsValueGlue.get(JsValueGlue.java:178)
    at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:65)
    at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:172)
    at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessagesWhileWaitingForReturn(BrowserChannelServer.java:337)
    at com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:218)
    at com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:136)
    at com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:561)
    at com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:269)
    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:213)
    at sun.reflect.GeneratedMethodAccessor57.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:172)
    at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessages(BrowserChannelServer.java:292)
    at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:546)
    at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:363)
    at java.lang.Thread.run(Thread.java:662)

followed by following error in a loop

11:44:02.797 [ERROR] [t] Uncaught exception escaped
com.google.gwt.dev.shell.HostedModeException: Something other than an int was returned from JSNI method '@com.google.gwt.core.client.JsArray::length()': JS value of type undefined, expected int
    at com.google.gwt.dev.shell.JsValueGlue.getIntRange(JsValueGlue.java:266)
    at com.google.gwt.dev.shell.JsValueGlue.get(JsValueGlue.java:144)
    at com.google.gwt.dev.shell.ModuleSpace.invokeNativeInt(ModuleSpace.java:247)
    at com.google.gwt.dev.shell.JavaScriptHost.invokeNativeInt(JavaScriptHost.java:75)
    at com.google.gwt.core.client.JsArray$.length$(JsArray.java)
    at com.google.gwt.core.client.impl.SchedulerImpl.runRepeatingTasks(SchedulerImpl.java:161)
    at com.google.gwt.core.client.impl.SchedulerImpl.flushPostEventPumpCommands(SchedulerImpl.java:392)
    at com.google.gwt.core.client.impl.SchedulerImpl$Flusher.execute(SchedulerImpl.java:78)
    at com.google.gwt.core.client.impl.SchedulerImpl.execute(SchedulerImpl.java:138)
    at sun.reflect.GeneratedMethodAccessor38.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:172)
    at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessagesWhileWaitingForReturn(BrowserChannelServer.java:337)
    at com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:218)
    at com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:136)
    at com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:561)
    at com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:269)
    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:213)
    at sun.reflect.GeneratedMethodAccessor36.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:172)
    at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessages(BrowserChannelServer.java:292)
    at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:546)
    at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:363)
    at java.lang.Thread.run(Thread.java:662)


SOLUTION
Change StatementPresenter as following

/**
 * @author prayag
 * @date Sep 13, 2012
 */
public class StatementPresenter
extends
Presenter<IStatementView, StatementPresenter.IStatementTabContentProxyPlace>
implements IStatementView.IStatementUiHandlers {

@Inject
PlaceManager placeManager;

 /*remove RequestTabsHandler*/

@Inject
public StatementPresenter(EventBus eventBus, IStatementView view,
IStatementTabContentProxyPlace proxy) {
super(eventBus, view, proxy);
getView().setUiHandlers(this);
}

@ProxyCodeSplit
@NameToken(NameTokens.STATEMENT)
public interface IStatementTabContentProxyPlace extends
TabContentProxyPlace<StatementPresenter> {

}

@TabInfo(container = TStatementPresenter.class)
static TabData getTabLabel(TGinInjector ginjector) {
return new TabDataBasic(ginjector.getTransconnectConstants()
.statement(), 0);
}

@Override
protected void revealInParent() {
  /*
   * use TYPE_SetTabContentHandler of Main Tab TStatementPresenter
   */
RevealContentEvent.fire(this,
TStatementPresenter.TYPE_SetTabContentHandler, this);
}

@TitleFunction
public String getTranslatedTitle(TGinInjector gInjector) {
return gInjector.getTConstants().statement();
}
}


No comments:

Post a Comment