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!