Errai Testing - Calling RPC
cristianmiranda Mar 14, 2014 9:40 AMHi guys,
I've created a test for an RPC and I'm having the following error: http://pastebin.com/FjpbbRpH
package app.client.local; import app.client.shared.service.AsyncRPCService; import org.jboss.errai.bus.client.api.base.MessageBuilder; import org.jboss.errai.bus.client.tests.AbstractErraiTest; import org.jboss.errai.common.client.api.RemoteCallback; /** * Created by cristianmiranda on 3/13/14. */ public class GreetingRPCTest extends AbstractErraiTest { @Override public String getModuleName() { return "app.App"; } @Override protected void gwtSetUp() throws Exception { super.gwtSetUp(); } public void testcreateStrategy() throws Exception { System.out.println("-- Testing create strategy --"); runAfterInit(new Runnable() { @Override public void run() { MessageBuilder.createCall(new RemoteCallback<String>() { @Override public void callback(String response) { System.out.println("-- Got a response! --"); assertEquals("foobar", response); finishTest(); } }, AsyncRPCService.class).doSomeTask(); } }); } }
I already have this in my web.xml:
<servlet> <servlet-name>ErraiServlet</servlet-name> <servlet-class>org.jboss.errai.bus.server.servlet.DefaultBlockingServlet</servlet-class> <init-param> <param-name>auto-discover-services</param-name> <param-value>true</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>
My @Remote interface is in the client package and my @Service implementation is in the server package.
Server side service is not being found in ServiceProcessor.java:70
@Override public void process(final BootstrapContext context, MetaDataScanner reflections) { final ErraiServiceConfiguratorImpl config = (ErraiServiceConfiguratorImpl) context.getConfig(); final Set<Class<?>> services = reflections.getTypesAnnotatedWithExcluding(Service.class, CLIENT_PKG_REGEX); final Set<Method> methodServices = reflections.getMethodsAnnotatedWithExcluding(Service.class, CLIENT_PKG_REGEX); for (Class<?> loadClass : services) { processServiceClass(loadClass, context, config); } for (Method loadMethod : methodServices) { processServiceMethod(loadMethod, context, config); } }
I have debugged the sources and noticed the following in ClientMessageBusImpl.java:793
if (!localOnly && remotes.containsKey(subject)) { // LogUtil.log("[bus] sent to remote: " + message); remotes.get(subject).callback(message); routedToRemote = true; }
... remotes does not contain my Remote service AsyncRPCService (it is annotated with @org.jboss.errai.bus.server.annotations.Remote)
I see this in my generated RpcProxyLoaderImpl.java
class app_client_shared_service_AsyncRPCServiceImpl extends AbstractRpcProxy implements AsyncRPCService { public CallableFuture doSomeTask() { RemoteCallSendable sendable = null; if (errorCallback == null) { sendable = MessageBuilder.createCall().call("app.client.shared.service.AsyncRPCService").endpoint("doSomeTask:", qualifiers, new Object[] { }).respondTo(CallableFuture.class, remoteCallback).defaultErrorHandling(); } else { sendable = MessageBuilder.createCall().call("app.client.shared.service.AsyncRPCService").endpoint("doSomeTask:", qualifiers, new Object[] { }).respondTo(CallableFuture.class, remoteCallback).errorsHandledBy(errorCallback); } app_client_shared_service_AsyncRPCServiceImpl.this.sendRequest(bus, sendable); return null; } } RemoteServiceProxyFactory.addRemoteProxy(AsyncRPCService.class, new ProxyProvider() { public Object getProxy() { return new app_client_shared_service_AsyncRPCServiceImpl(); } });
Here is my App.gwt.xml: http://pastebin.com/Dj70VRzL
Any ideas?
Thanks in advance!