java中非法的远程方法

2024-01-03

这是我第一次使用java Rmi*。我有一个扩展的自定义类UnicastRemoteObject并实现一个扩展远程的接口。我认为我已经在类中正确实现了接口的方法,但我仍然得到一个IllegalArgumentException当我尝试运行我的代码时(这是关于没有参数的方法)。

jvm 声称遇到了非法远程方法,但该方法及其实现对我来说似乎很好。

除了错误地实现或调用方法之外,是否还有其他原因可能导致出现此异常?


这是堆栈跟踪:

SEVERE: null
java.rmi.server.ExportException: remote object implements illegal remote interface; nested exception is:
        java.lang.IllegalArgumentException: illegal remote method encountered: public abstract java.lang.String Node.getId()
        at sun.rmi.server.UnicastServerRef.exportObject(Unknown Source)
        at java.rmi.server.UnicastRemoteObject.exportObject(Unknown Source)
        at java.rmi.server.UnicastRemoteObject.exportObject(Unknown Source)
        at java.rmi.server.UnicastRemoteObject.<init>(Unknown Source)
        at java.rmi.server.UnicastRemoteObject.<init>(Unknown Source)
        at NodeImpl.<init>(NodeImpl.java:30)
        at NodeLauncher.main(NodeLauncher.java:11)
Caused by: java.lang.IllegalArgumentException: illegal remote method encountered: public abstract java.lang.String Node.getId()
        at sun.rmi.server.Util.checkMethod(Unknown Source)
        at sun.rmi.server.Util.getRemoteInterfaces(Unknown Source)
        at sun.rmi.server.Util.getRemoteInterfaces(Unknown Source)
        at sun.rmi.server.Util.createProxy(Unknown Source)
        ... 7 more

这是界面:

import java.rmi.*;
import java.util.LinkedList;

interface Node extends Remote
{
    public boolean isAlive();

    public LinkedList<NodeImpl> getLeafNodes();

    public LinkedList<NodeImpl> getNeighborhoodList();

    public String [] getRoutingTable();

    public NodeImpl initiation(String credentials,Object application);

        public String route(String message,String key);

        public void inform(byte [] id);

        public String getId();

        public boolean isConnected();

        public void applicationClose();

        public boolean distanceMeasure();
}

这是该类的构造函数:

public NodeImpl() throws RemoteException
    {
        super();
        l=4;
        M=1;
        nodeId=new byte [16];
        Random r=new Random();
        r.nextBytes(nodeId);
        leafNodes=new LinkedList<NodeImpl>();
        connected=false;
        ng=new NodeGUI(this);

        for(int i=0;i<l;i++)
        {
            leafNodes.add(null);
        }

        neighborhoodList=new LinkedList<NodeImpl>();
        anyNodeWhoAnswered=new LinkedList<byte []>();
        it=new InformingTimer(this);
        Thread informingTimerThread=new Thread(it);
        informingTimerThread.start();

        try 
        {
            Naming.rebind("rmi://" + "localhost" + ":1099/"+nodeId, this);
        }
        catch (Exception ex) 
        {
            Logger.getLogger(NodeImpl.class.getName()).log(Level.SEVERE, null, ex);
        }

        bootstrap();
    }

RMI 上的所有方法Remote接口必须声明RemoteException在他们的throws子句,例如:

public String getId() throws RemoteException;

目前尚不清楚为什么异常名称getId()具体来说,这可能只是它检查的第一个方法。

另外,getLeafNodes() and getNeighborhoodList()方法应该具有指定的返回类型Node, not NodeImpl,否则他们也可能会失败。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java中非法的远程方法 的相关文章

随机推荐

  • laravel 5.4 MIME 自定义错误消息不起作用?

    Dearest 我想为上传的图像制作自定义错误消息 这是我的控制器代码 protected function validator data validateContent messages imgUserAvatar mimes gt Fi
  • Riverpod:摄取 REST API 的简单方法

    我目前正在构建一个应用程序 该应用程序摄取 WordPress REST API 来显示博客文章 在初始应用程序加载时 我希望它使用一种方法提取初始数据 然后通过用户交互提取更多帖子 我目前正在进行这项工作 但是 我的实现似乎很复杂 并且可
  • 如何计算 PySpark 中行之间的差异?

    这是我在 PySpark 中的数据框 utc timestamp data feed 2015 10 13 11 00 00 00 00 1 A 2015 10 13 12 00 00 00 00 5 A 2015 10 13 13 00
  • OpenShift 中水平 pod 自动缩放器的自定义指标

    我正在使用 openshift v3 它使用 kubernetes 版本 1 2 我正在探索更多有关自动缩放功能的信息 目前它表示仅支持 CPU 指标 有没有一种方法可以根据内存或从 heapster 收集的其他指标数据来扩展 opensh
  • 如何等待ajax请求?

    我正在尝试编写一个 JS 代码 如果给定的数字已存在于数据库中 该代码将取消 btn submit 按钮 onclick 事件 我使用 AJAX 查询数据库中的给定数字 并确定是否应将数据发送到将上传问题的 php 站点 为了确定这一点 我
  • 在 Python 2.7 中复制 Java 的 PBEWithMD5AndDES

    如果这不是很明显 我首先要说的是我不是加密货币人士 我的任务是在 Python 2 7 中复制 Java 的 PBEWithMD5AndDES 具有 DES 加密的 MD5 摘要 的行为 我确实可以访问 Python 的加密工具包 PyCr
  • Python if语句无法识别蓝牙信标

    这是 BeaconScanner py 文件用来查找和列出 ble 信标的 ScanUtility py 文件 This is a working prototype DO NOT USE IT IN LIVE PROJECTS impor
  • IActionDelegate 的 SelectionChanged() 未被调用

    我有一个动作类 我想根据文件扩展名启用它 我把这个逻辑写在selectionChanged 动作类的 但是当我启动 Eclipse 并单击上下文菜单的文件时 不会调用此方法 当我单击任何操作时 单击该文件后都会调用selectionChan
  • 相当于 Unix tail 命令的 Windows [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我正在寻找相当于 Unix tail 命令的命令 它允许我在写入日志文件时观察日志文件的输出 如果您使用 PowerShell 那么这有效 Get C
  • T-SQL Puzzler - 爬取对象依赖关系

    此代码涉及递归存储过程调用和避免游标名称冲突的 不太好 的方法 最后我不在乎它是否使用游标 只是寻找最优雅的方法 我主要将其用作跟踪存储过程层次结构的简单方法 无需购买产品 我在 动态sql 中尝试了游标 但运气不佳 我想深入大约 10 层
  • iOS Google Plus 集成和共享

    我正在尝试将我的应用程序中的内容分享到 Google Plus 为此 我使用了以下代码 IBAction handleGPlus id
  • docker rmi 无法删除镜像,并且:没有这样的 id

    我有很多图像 当我尝试删除它们时docker rmi sudo docker rmi acd33a9490dc Error response from daemon No such id 75ce1f6710bab109a7d7cbee05
  • C++ 对非 const 对象的 const 引用和对非 const 对象的非 const 引用之间的区别

    如果引用的对象不是 const 对象 则引用的 const 关键字的用途是什么 r1 和 r2 的作用 如下 有什么区别吗 int i 42 non const object const int r1 i const reference t
  • 从 UNION 创建临时表时遇到问题

    我有一个 UNION 语句 它本身执行得很好 SELECT 1999999999 AS MobileNo Test AS FirstName Last AS LastName 268 AS TemplateID AS MISC1 AS MI
  • 获取 UILabel 中的行数

    针对同一问题的许多旧解决方案已被弃用 UILineWordWrap 仅举一个已弃用的解决方案 我还发现其中一些不可靠 那么 在IOS 8中 我应该如何找到uilabel中的行数呢 As of iOS8 您可以使用 NSString boun
  • 我可以在 Linux 中进行写时复制 memcpy 吗?

    我有一些代码 我经常复制一大块内存 通常是在对其进行很小的更改之后 我已经实现了一个跟踪更改的系统 但我认为如果可能的话 告诉操作系统对内存进行 写时复制 并让它只处理这些部分的副本 这可能会很好哪个改变 然而 虽然 Linux 确实进行了
  • 从 html 创建 nsattributedstring 时,ios7 字体大小发生变化

    我有一个 UITextView 我在其中管理一个 NSAttributedString 最初通过键盘正常输入 我将属性字符串保存为 HTML 看起来不错 当我再次加载它并将其从 HTML 转换回属性字符串时 字体大小似乎发生了变化 例如 加
  • Jquery Flot 缓慢并冻结 IE

    我目前必须在 8000 32000 点 4 行 8000 点 附近进行绘图 我通过 JSON 请求获取数据 效果非常好 实际上数据会在不到一秒的时间内返回给我 然而 每当我到达 plot 点时 它就会冻结 IE8 并且需要永远加载那么多点
  • 如何让 Vim 在 Cygwin 上显示正确的颜色?

    我在 Cygwin 上使用 Vim 我正在尝试使用沙漠配色方案 在 gVim 中它看起来像这样 https i stack imgur com FNaVa png https i stack imgur com FNaVa png 但在我的
  • java中非法的远程方法

    这是我第一次使用java Rmi 我有一个扩展的自定义类UnicastRemoteObject并实现一个扩展远程的接口 我认为我已经在类中正确实现了接口的方法 但我仍然得到一个IllegalArgumentException当我尝试运行我的