왜이 예외가 발생하는지 도와 주시겠습니까?
제가불행히도 RF이 최초 호출 서버의 예외를 발생 (상세 here이다) 그래서 GWT 클라이언트 안드로이드 클라이언트에 모두 사용할 수있는 별도의 용기에 RequestFactory 프록시 문맥 인터페이스를 추출 하였다. 예외는 다음과 같습니다.
com.google.web.bindery.requestfactory.server.UnexpectedException: No RequestContext for operation LPZEK7DlYkoG1$NQ5MjHlmuRChk=
at com.google.web.bindery.requestfactory.server.ServiceLayerDecorator.die(ServiceLayerDecorator.java:216)
at com.google.web.bindery.requestfactory.server.ResolverServiceLayer.resolveRequestContext(ResolverServiceLayer.java:154)
아래는 제 팩토리 인터페이스입니다. 당신이 볼 수 있듯이 주석을 ServiceName
으로 대체해야했습니다. 왜냐하면 Guice 주사를 사용하여 모든 맞춤형 로케이터를 모바일 장치로 옮길 용기에 컴파일하고 싶지 않았기 때문입니다. 서버의 디버거에서 던진 예외가 나는 com.google.web.bindery.requestfactory.vm.impl.Deobfuscator
의 인스턴스가 초기화되고 빈 operationData
필드가 볼 때, 그래서
Cannot fully validate context since domain type com.blah.courierApp.server.dao.UserServiceDao is not available.
You must run the ValidationTool as part of your server build process.
Add @SuppressWarnings("requestfactory") to dismiss.
: 나는 그것을 컴파일
public interface AdminRequestFactory extends RequestFactory
{
// @Service(value = UserServiceDao.class, locator = InjectingServiceLocator.class)
@ServiceName(value = "com.blah.courierApp.server.dao.UserServiceDao", locator = "com.blah.courierApp.server.inject.InjectingServiceLocator")
public interface GaeUserServiceContext extends RequestContext
{
public Request<String> createLogoutURL(String destinationURL);
public Request<GaeUser> getCurrentUser();
}
// @Service(value = OrderDao.class, locator = InjectingServiceLocator.class)
@ServiceName(value = "com.blah.courierApp.server.dao.OrderDao", locator = "com.blah.courierApp.server.inject.InjectingServiceLocator")
public interface OrderRequestContext extends RequestContext
{
Request<List<OrderProxy>> listAll();
Request<Void> delete(Long id);
Request<Void> createOrder(OrderProxy order);
Request<OrderProxy> findOrderById(long id);
Request<Void> updateOrderState(long id, StateType newStateType);
}
GaeUserServiceContext contextUserService();
OrderRequestContext contextOrder();
}
는 RF 주석 도구는 다음과 같은 경고했다 RequestFactory 주석 도구에 의해 생성 된 DeobfuscatorBuilder
클래스에 의해 생성됩니다.
그래서 ... 나는 그 클래스를 디 컴파일이 발견 공장
public final class AdminRequestFactoryDeobfuscatorBuilder extends Deobfuscator.Builder
{
public AdminRequestFactoryDeobfuscatorBuilder()
{
withRawTypeToken("w1Qg$YHpDaNcHrR5HZ$23y518nA=", "com.google.web.bindery.requestfactory.shared.EntityProxy");
withRawTypeToken("8KVVbwaaAtl6KgQNlOTsLCp9TIU=", "com.google.web.bindery.requestfactory.shared.ValueProxy");
withRawTypeToken("FXHD5YU0TiUl3uBaepdkYaowx9k=", "com.google.web.bindery.requestfactory.shared.BaseProxy");
withRawTypeToken("5vjE9LUy$l0uvi4kMYpS3JA1WEE=", "com.blah.shared.model.GaeUser");
withRawTypeToken("8KVVbwaaAtl6KgQNlOTsLCp9TIU=", "com.google.web.bindery.requestfactory.shared.ValueProxy");
withRawTypeToken("5a7OV4PSV$1xemsooKLfEQ4g5yY=", "com.blah.shared.proxies.OrderProxy");
withRawTypeToken("neR_xIhE5oZsc0HbnkAMa8A88yw=", "com.blah.shared.proxies.OrderStateProxy");
withRawTypeToken("t6gMQWDROJnYvqYhNURV8pd$sn4=", "com.blah.shared.proxies.OrganizationProxy");
withRawTypeToken("1o45xgS$5bIkBKF4wlR8oMw_FSo=", "com.blah.shared.proxies.PersonProxy");
withRawTypeToken("FXHD5YU0TiUl3uBaepdkYaowx9k=", "com.google.web.bindery.requestfactory.shared.BaseProxy");
}
}
이 발생하지 않은 토큰을. 따라서 Deobfuscator.Builder.withOperation
에 대한 호출이 없기 때문에 클라이언트에서 호출이 왔을 때 내 서버에서 컨텍스트를 찾을 수 없습니다.
질문은 다음과 같습니다
- 왜 RequestFactory 주석 도구 공장 (연산)에 대한 토큰을 생성하지 않는 이유는 무엇입니까?
- 어떻게 해결할 수 있습니까?
분명히 대답이 아니므로이 게시물을 삭제하시는 것이 좋습니다 (답변으로 게시 할 수 있음). – fdreger