[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[ecf-dev] Using native datatypes as method parameters

Title: Using native datatypes as method parameters

Hi,

is it possible to use primitive data types as method parameter in ECF? It seems to me that the deserialization of the shared message objects doesn't work correctly. A java.lang.NoSuchMethodException is always thrown, because ECF is trying to find a method with "class java.lang.Integer" as parameter data type instead of the primitive int data type. I wrote a little example application:

Interface:
public interface Test {
        void doSomething(int pBla);
}

Server:
public void start(BundleContext bundleContext) throws Exception {
        Activator.context = bundleContext;
        Properties props = new Properties();
        props.put("service.exported.interfaces", "*");         
        context.registerService(Test.class.getName(), new Test() {
               
                @Override
                public void doSomething(int pBla) {
                       
                }
        }, props);
}

Client:
Test t = (Test) getContext().getService(reference);
t.doSomething(42);

Throws:
java.lang.NoSuchMethodException: No such method: doSomething([class java.lang.Integer])
        at org.eclipse.ecf.core.sharedobject.SharedObjectMsg.doInvoke(SharedObjectMsg.java:310)
        at org.eclipse.ecf.core.sharedobject.SharedObjectMsg.invoke(SharedObjectMsg.java:290)
        at org.eclipse.ecf.provider.remoteservice.generic.RemoteServiceRegistrationImpl.callService(RemoteServiceRegistrationImpl.java:342)
        at org.eclipse.ecf.provider.remoteservice.generic.RegistrySharedObject$11.run(RegistrySharedObject.java:1423)
        at org.eclipse.equinox.concurrent.future.SingleOperationFuture$1.run(SingleOperationFuture.java:96)
        at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
        at org.eclipse.equinox.concurrent.future.SingleOperationFuture.runWithProgress(SingleOperationFuture.java:89)
        at org.eclipse.ecf.core.jobs.JobsExecutor.safeRun(JobsExecutor.java:52)
        at org.eclipse.ecf.core.jobs.JobsExecutor$1.run(JobsExecutor.java:79)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)

Configuration:
JDK 1.6_20
ECF 1.4 with patch for Eclipse 3.5, 3.6