java.lang.ClassNotFoundException:对类加载器的访问被拒绝

时间:2012-01-12 10:30:57

标签: java

我是一名学习java的学生,并获得了作为任务java RMI 我创建了4个文件

  1. hellointerface
  2. remotehelloimpl
  3. 为HelloServer
  4. helloclient
  5. 我在eclipse上安装了jr6插件,在默认端口上运行注册表 代码如下 的 hellointerface

    package demo.rmi.hello.common;
    import java.rmi.Remote;
    import java.rmi.RemoteException;
    
    
    public interface helloInterface extends Remote {
    
        /** This is a sample method. Delete it and add one of your own. */
        public String simpleRemoteMethod(String arg) throws RemoteException;
        public String say() throws RemoteException;
    
    }
    

    代码 remotehelloimpl

     package demo.rmi.hello.server;
    import java.rmi.RemoteException;
    import java.rmi.server.UnicastRemoteObject;
    import demo.rmi.hello.common.helloInterface;
    public class remotehelloImpl extends UnicastRemoteObject implements
    helloInterface {
    String message;
    protected remotehelloImpl(String msg) throws RemoteException {
    //super();
    // TODO Auto-generated constructor stub
    message=msg;
    }
    public String say() throws RemoteException {
    // TODO Auto-generated method stub
    return message;
    }
    @Override
    public String simpleRemoteMethod(String arg) throws RemoteException {
        // TODO Auto-generated method stub
        return null;
    }
    }
    

    helloserver的代码

    package demo.rmi.hello.server;
    import java.rmi.Naming;
    import java.rmi.RMISecurityManager;
    import demo.rmi.hello.common.helloInterface;
    public class helloserver {
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    System.setSecurityManager(new RMISecurityManager());
    try {
    helloInterface h = new remotehelloImpl("Hello,From Me!");
    Naming.rebind("rmi://localhost:1099/HelloService", h);
    System.out.println ("Server is connected and ready for operation.");
    }
    catch (Exception e) {
    System.out.println ("Server not connected: " + e);
    }
    }
    }
    

    * helloclient的代码 *

    package demo.rmi.hello.client;
        import java.rmi.Naming;
        import java.rmi.RMISecurityManager;
        import demo.rmi.hello.common.helloInterface;
        public class helloclient {
        /**
        * @param args
        */
        public static void main (String[] argv) {
        System.setSecurityManager(new RMISecurityManager());
        try {
        helloInterface hello =(helloInterface) Naming.lookup ("rmi://localhost/HelloService");
        System.out.println (hello.say());
        }
        catch (Exception e){
        System.out.println ("HelloClient exception: " + e);}
        }
        }
    

    我有两个安全策略(在eclipse上自动生成) 政策一 //这个文件是由RMI Plugin for Eclipse生成的。

    ///////////////////////////////////////////////////////////////
    // This is a sample policy file that grants the application all permissions. 
    // A policy file is needed by the RMISecurityManager and your application might
    // not work after installing the RMISecurityManager unless you provide a 
    // security policy file at launch.
    //
    // You can configure the security policy of a launched application using either
    // the RMI Launcher or by manually setting the java.security.policy property.
    //
    // SECURITY NOTE: This security policy is good for development. For deployment
    // you may need a stricter security policy.
    //
    // For more information see:
    //    http://java.sun.com/docs/books/tutorial/rmi/running.html
    //    http://java.sun.com/j2se/1.5.0/docs/guide/security/PolicyFiles.html
    // 
    
    grant {
        permission java.security.AllPermission;
    
        // Other options:
        // permission java.net.SocketPermission "127.0.0.1:1024-", "accept, connect, listen, resolve";
        // permission java.net.SocketPermission "localhost:1024-", "accept, connect, listen, resolve";
    
        // From http://java.sun.com/docs/books/tutorial/rmi/running.html
        // Copyright 1995-2005 Sun Microsystems, Inc. Reprinted with permission 
    
        // permission java.net.SocketPermission "*:1024-65535", "connect,accept";
        // permission java.net.SocketPermission "*:80", "connect";
    
        // permission java.net.SocketPermission "*:1024-65535", "connect,accept";
        // permission java.io.FilePermission "c:\\home\\ann\\public_html\\classes\\-", "read";
        // permission java.io.FilePermission "c:\\home\\jones\\public_html\\classes\\-", "read";
    };
    

    * 安全政策2

       // This file was generated by the RMI Plugin for Eclipse.
    
    ///////////////////////////////////////////////////////////////
    // This is a sample policy file that grants the application all permissions. 
    // A policy file is needed by the RMISecurityManager and your application might
    // not work after installing the RMISecurityManager unless you provide a 
    // security policy file at launch.
    //
    // You can configure the security policy of a launched application using either
    // the RMI Launcher or by manually setting the java.security.policy property.
    //
    // SECURITY NOTE: This security policy is good for development. For deployment
    // you may need a stricter security policy.
    //
    // For more information see:
    //    http://java.sun.com/docs/books/tutorial/rmi/running.html
    //    http://java.sun.com/j2se/1.5.0/docs/guide/security/PolicyFiles.html
    // 
    
    grant {
        permission java.security.AllPermission;
    
        // Other options:
        // permission java.net.SocketPermission "127.0.0.1:1024-", "accept, connect, listen, resolve";
        // permission java.net.SocketPermission "localhost:1024-", "accept, connect, listen, resolve";
    
        // From http://java.sun.com/docs/books/tutorial/rmi/running.html
        // Copyright 1995-2005 Sun Microsystems, Inc. Reprinted with permission 
    
        // permission java.net.SocketPermission "*:1024-65535", "connect,accept";
        // permission java.net.SocketPermission "*:80", "connect";
    
        // permission java.net.SocketPermission "*:1024-65535", "connect,accept";
        // permission java.io.FilePermission "c:\\home\\ann\\public_html\\classes\\-", "read";
        // permission java.io.FilePermission "c:\\home\\jones\\public_html\\classes\\-", "read";
    };
    

    我首先启动注册表,然后启动服务器,但我发现以下错误,

    Server not connected: java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
        java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
        java.lang.ClassNotFoundException: access to class loader denied
    

1 个答案:

答案 0 :(得分:0)

查看this post,其中讨论了“拒绝访问类加载器”的问题。

此外,您尚未在客户端代码中指定端口号1099。