2012-05-06 4 views
0

또는 GWT에서 이것을 보관하는 가장 좋은 방법은 무엇입니까?RequestFactory를 사용하여 JSON-RPC 서비스를 호출하는 방법

RequestFactory를 사용하여 매개 변수를 사용하여 간단한 서비스를 호출하는 방법에 대한 코드를 게시하십시오.

UPDATE :

토마스, 난 당신의 제안을 내 코드를 업데이트했다.

11:37:49.722 [ERROR] [modules] Uncaught exception escaped 
java.lang.AssertionError: java.lang.String is not an EntityProxy type 
    at com.google.web.bindery.requestfactory.shared.impl.IdFactory.asEntityProxy(IdFactory.java:66) 
    at com.google.web.bindery.requestfactory.shared.impl.IdFactory.createId(IdFactory.java:229) 
    at com.google.web.bindery.requestfactory.shared.impl.IdFactory.allocateId(IdFactory.java:41) 
    at com.google.web.bindery.requestfactory.shared.impl.AbstractRequestContext$JsonRpcPayloadDialect.processPayload(AbstractRequestContext.java:251) 
    at com.google.web.bindery.requestfactory.shared.impl.AbstractRequestContext$5.onTransportSuccess(AbstractRequestContext.java:1108) 
    at com.google.web.bindery.requestfactory.gwt.client.DefaultRequestTransport$1.onResponseReceived(DefaultRequestTransport.java:136) 
    at com.google.gwt.http.client.Request.fireOnResponseReceived(Request.java:287) 
    at com.google.gwt.http.client.RequestBuilder$1.onReadyStateChange(RequestBuilder.java:395) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    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.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    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(Unknown Source) 
+0

당신이하려는 것은 불가능할뿐만 아니라, 그것은 말이되지 않습니다. –

+0

절대적으로 잘못되었습니다! –

+0

에두아르도, 시도한 것을 공유하고 문제를 공유 할 수 있습니까? –

답변

1

Cat는이 ValueProxy 주석 @JsonRpcProxy으로해야한다 :

public interface MyRequestFactory extends RequestFactory { 
    MyRequestFactory INSTANCE = GWT.create(MyRequestFactory.class); 

    MyRequestContext myRequestContest(); 
} 

@JsonRpcService 
public interface MyRequestContext extends RequestContext { 

    UserFullFormattedName userFullFormattedName(); 

    @JsonRpcWireName(value = "GetUserFullFormattedName") 
    public interface UserFullFormattedName extends Request<String> { 
    } 
} 

public static EventBus EVENT_BUS = GWT.create(SimpleEventBus.class); 

public void onModuleLoad() { 

    DefaultRequestTransport requestTransport = new DefaultRequestTransport(); 
    requestTransport.setRequestUrl("../services/service.ashx"); 

    MyRequestFactory.INSTANCE.initialize(EVENT_BUS, requestTransport); 

    MyRequestFactory.INSTANCE.myRequestContext().userFullFormattedName().fire(new Receiver<String>() { 

     @Override 
     public void onSuccess(String response) { 
      System.out.println(response); 

     } 
    }); 

이 코드는 실패 또한

@JsonRpcProxy 
interface Cat extends ValueProxy { 
    String getName(); 
    String getId(); 
} 

, 내가 같이 필요한 @JsonRpcWireName 확실하지 않다 그 값은 메소드 이름과 같습니다.

+0

Thomas는 업데이트 된 코드와 문제점을 알려주십시오. :-) –

+0

'RequestFactory'를 사용하기 전에'INSTANCE.initialize (eventBus)'호출을 놓친 것처럼 보입니다. –

+0

Thomas에게 감사드립니다. 나는 EventBus를 놓치고 있었다. .. 지금 전화가 끝난다. ... O :-) –