0

Objectify を使用して Google App Engine でバックエンドを実行しており、それに REST Web サービスを追加しようとしています。私は Restlet について良いことしか読んだことがないので、そこから始めることにしました - 最初のアプリケーションの例を見て、それをやり遂げました - すべてをセットアップしてから、最終的にクライアント側で次のような問題に遭遇しました:

private final UserResourceProxy userResourceProxy = GWT.create(UserResourceProxy.class);

UserResourceProxy は次のとおりです。

import org.restlet.client.resource.ClientProxy;
import org.restlet.client.resource.Delete;
import org.restlet.client.resource.Get;
import org.restlet.client.resource.Put;
import org.restlet.client.resource.Result;

import com.exposure101.lifelogger.shared.entity.User;

public interface UserResourceProxy extends ClientProxy {

  @Get
  public void find(String emailAddress, Result<User> callback);

  @Put
  public void persist(User user, Result<User> callback);

  @Delete
  public void delete(Result<Void> callback);
}

これが私が得たスタックトレースです-GWT 2.4でClientProxyを作成する方法がわからないようです

java.lang.RuntimeException: Deferred binding failed for 'com.exposure101.lifelogger.client.rest.proxy.UserResourceProxy' (did you forget to inherit a required module?)
  at com.google.gwt.dev.shell.GWTBridgeImpl.create(GWTBridgeImpl.java:53)
  at com.google.gwt.core.client.GWT.create(GWT.java:97)
  at com.exposure101.lifelogger.client.App.<init>(App.java:20)
  at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
  at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
  at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
  at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
  at com.google.gwt.dev.shell.ModuleSpace.rebindAndCreate(ModuleSpace.java:465)
  at com.google.gwt.dev.shell.ModuleSpace.onLoad(ModuleSpace.java:375)
  at com.google.gwt.dev.shell.OophmSessionHandler.loadModule(OophmSessionHandler.java:200)
  at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:525)
  at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:363)
  at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.IncompatibleClassChangeError: Found interface com.google.gwt.core.ext.typeinfo.JClassType, but class was expected
  at org.restlet.rebind.ClientProxyGenerator.generate(ClientProxyGenerator.java:239)
  at com.google.gwt.core.ext.GeneratorExtWrapper.generate(GeneratorExtWrapper.java:48)
  at com.google.gwt.core.ext.GeneratorExtWrapper.generateIncrementally(GeneratorExtWrapper.java:60)
  at com.google.gwt.dev.javac.StandardGeneratorContext.runGeneratorIncrementally(StandardGeneratorContext.java:647)
  at com.google.gwt.dev.cfg.RuleGenerateWith.realize(RuleGenerateWith.java:41)
  at com.google.gwt.dev.shell.StandardRebindOracle$Rebinder.rebind(StandardRebindOracle.java:78)
  at com.google.gwt.dev.shell.StandardRebindOracle.rebind(StandardRebindOracle.java:268)
  at com.google.gwt.dev.shell.ShellModuleSpaceHost.rebind(ShellModuleSpaceHost.java:141)
  at com.google.gwt.dev.shell.ModuleSpace.rebind(ModuleSpace.java:585)
  at com.google.gwt.dev.shell.ModuleSpace.rebindAndCreate(ModuleSpace.java:455)
  at com.google.gwt.dev.shell.GWTBridgeImpl.create(GWTBridgeImpl.java:49)
  at com.google.gwt.core.client.GWT.create(GWT.java:97)
  at com.exposure101.lifelogger.client.App.<init>(App.java:20)
  at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
  at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
  at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
  at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
  at com.google.gwt.dev.shell.ModuleSpace.rebindAndCreate(ModuleSpace.java:465)
  at com.google.gwt.dev.shell.ModuleSpace.onLoad(ModuleSpace.java:375)
  at com.google.gwt.dev.shell.OophmSessionHandler.loadModule(OophmSessionHandler.java:200)
  at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:525)
  at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:363)
  at java.lang.Thread.run(Thread.java:662)
4

1 に答える 1

1

このエラーは通常、GWT 2.1 以前に対してコンパイルされたライブラリを GWT 2.2 以降で使用していることを意味します。GWT 2.2 ではバイナリの非互換性が導入されました。ただし、ソース レベルの重大な変更はないため、サードパーティ ライブラリを GWT 2.2 に対して再コンパイルするだけで、GWT 2.2 以降で動作するようになります。

つまり、より新しいバージョンの Restlet を使用してみてください。最近のバージョンの GWT に対してコンパイルされたもの。

于 2012-07-08T11:05:45.947 に答える