Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >当联系RMI服务器时客户端线程失败: java.rmi.UnmarshalException:错误解组返回

当联系RMI服务器时客户端线程失败: java.rmi.UnmarshalException:错误解组返回
EN

Stack Overflow用户
提问于 2017-12-19 15:20:35
回答 1查看 1.4K关注 0票数 0

我有一个客户端,它从JSP页面获取输入,然后将其提供给线程,线程被添加到线程池中,当它执行线程联系RMI服务器以获取远程对象时,应该返回将显示在新JSP页面上的结果,问题是一旦执行可运行代码,我会得到以下错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
java.rmi.UnmarshalException: error unmarshalling return; nested exception is: 
    java.lang.ClassNotFoundException: servertest.DictionaryInterface (no security manager: RMI class loader disabled)
    at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
    at java.rmi.Naming.lookup(Unknown Source)
    at Client.LookupWorker.run(LookupWorker.java:27)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: servertest.DictionaryInterface (no security manager: RMI class loader disabled)
    at sun.rmi.server.LoaderHandler.loadProxyClass(Unknown Source)Thread didnt finish its job properly, error: java.lang.NullPointerException

以下是JSP页面后面的Java代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if (request.getParameter("word") != null) {
            String word = request.getParameter("word");
            String res;
            System.out.println("The word to find: "+word);

            // Get handle on our pool
            WorkerPool pool = WorkerPool.getInstance( );
            // Create Job
            LookupWorker wordWork = new LookupWorker(word);
            // Add job to pool
            res = pool.addJob(wordWork);
            request.getSession().setAttribute("result", res);
            response.sendRedirect("/SearchResults"); 
        }

下面是线程类:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package Client;

import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;

import DictionaryInterface.DictionaryInterface;

public class LookupWorker implements WorkerPlan {

    private String word;
    private String jobName;
    private String serverResult;
    private long threadId;

    public LookupWorker(String w) {
        super();
        this.word = w;
        jobName = "Lookup Job";
    }

    @Override
    public void run(){
        DictionaryInterface Dictonary = null;
        try {
            Dictonary = (DictionaryInterface) Naming.lookup("rmi://127.0.0.1:1099/DictionaryService");
        } catch (MalformedURLException | RemoteException | NotBoundException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        try {
            serverResult = Dictonary.lookup(word);
        } catch (RemoteException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
            System.out.println(serverResult); 
            threadId = Thread.currentThread().getId();
    }

    public String getServerResult() {
        return serverResult;
    }

    public String getWord() {
        return word;
    }

    public String getJobName() {
        return jobName;
    }

    @Override
    public String toString() {
        return jobName + " [Id= " + threadId + "word= " + word + ", serverResult= " + serverResult + "]";
    }   

}

执行线程时涉及的池代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public String addJob(WorkerPlan job) {
        String result;
        threadCounter++;
        // Adding new lookup job to our queue
        System.out.println("Adding a " + job.getJobName() + " to the queue. Searching for: " + job.getWord() + " Job number: " + threadCounter);
        executor.execute(job);
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } // sleep so we can wait for rmi object to come in
        System.out.println(job.toString());
        result = job.getServerResult();
        return result;
    }

对于VM参数,我尝试过不同的路径,但是无法让它工作,任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-19 15:23:28

当与RMI服务器联系时,客户端线程失败:

不是的。当查找RMI注册表时,它会失败。看到堆栈跟踪。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
java.rmi.UnmarshalException: error unmarshalling return

看到堆栈跟踪。潜在的错误是

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
java.lang.ClassNotFoundException: servertest.DictionaryInterface (no security manager: RMI class loader disabled)

您还没有将该类部署到客户端。你似乎同时拥有了servertest.DictionaryInterfaceDictionaryInterface.DictionaryInterface。你不能这么做。包的名称必须是相同的两端。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47896631

复制
相关文章
当 snapshot 失败时发生了什么
工作中遇到了与 snapshot 异常相关的问题,特此总结一下,与 snapshot 相关的流程图如下:
shengjk1
2020/10/16
1K0
当 snapshot 失败时发生了什么
wcf远程服务器返回错误404
 最近根据quartz.net 和wcf做资讯内容定时推送,wcf调用的时候出现远程服务器返回错误404,一直找不到原因是什么,客户端和服务器地址和配置都没啥问题,最后发现wcf请求数据,有传输大小限制。
yaphetsfang
2020/07/30
1.5K0
批量单聊消息发送时,没有返回发送失败的账户和错误码,不回调
我要向(“a”, "b")两个个用户发送批量单聊消息,如果a账户存在(已登录过IM或已导入),而b账户不存在,通过REST API发送,并没有返回b发送失败的信息,而是返回OK,并没有文档中所说的ErrorList字段,如下
用户6968426
2020/02/19
2.5K1
批量单聊消息发送时,没有返回发送失败的账户和错误码,不回调
ffmpeg avformat_open_input返回失败,错误码-10049
ffmpeg avformat_open_input失败,返回错误码-10049,错误描述:Error number -10049 occurred
全栈程序员站长
2022/11/10
1.8K0
ffmpeg avformat_open_input返回失败,错误码-10049
Java中的RMI(远程方法调用)
RMI(Remote Method Invocation,远程方法调用)是从java1.1开始实现的,它大大增强了Java开发分布式应用的能力。RMI对接口有着强烈的依赖,在需要创建一个远程对象的时候,我们通过传递一个接口来隐藏基层的实施细节,所以客户得到远程对象的一个句柄时,它们真正得到的是接口句柄,然后本地代码通过接口操作远程对象。通过RMI编写程序可以非常方便的实现分布式Java应用程序。
用户7886150
2020/12/18
1.6K0
WCF实现将服务器端的错误信息返回到客户端
2011-12-21 11:37 by Ref Tian, 398 visits, 收藏, 编辑
跟着阿笨一起玩NET
2018/09/20
1.1K0
WCF实现将服务器端的错误信息返回到客户端
当NASA因公制数学错误而丢失航天器时
1999年9月,经过近10个月的火星旅行后,火星气候轨道飞行器被烧成碎片。在NASA工程师希望庆祝的那天,事实证明地面实在是完全不同的,这都是因为有人没有使用正确的单位,即公制单位!《科学美国人》太空实验室就这个主题制作了一个简短而有趣的视频。
开物小编
2021/04/27
1.8K0
当NASA因公制数学错误而丢失航天器时
JEP290攻防对抗
JEP290增强机制是在2016年提出的一个针对JAVA 9的一个新特性,用于缓解反序列化攻击,随后官方决定向下引进该增强机制,分别对JDK 6,7,8进行了支持:
Al1ex
2021/07/21
6560
JEP290攻防对抗
RMI
RMI定义:     RMI即远程方法调用(Remote Method Invocation)。能够让在某个java虚拟机上的对象像调用本地对象一样调用另一个java 虚拟机中的对象上的方法。       RMI使用的是JRMP(Java Remote Messageing Protocol), JRMP是专门为java定制的通信协议,所以踏实纯java的分布式解决方案。  实现方式: 1. 创建远程接口, 并且继承java.rmi.Remote接口 2. 实现远程接口,并且继承:UnicastRemote
用户1215919
2018/02/27
7220
java常考面试题
Java虚拟机是一个可以执行Java字节码的虚拟机进程。Java源文件被编译成能被Java虚拟机执行的字节码文件。 Java被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每一个平台单独重写或者是重新编译。Java虚拟机让这个变为可能,因为它知道底层硬件平台的指令长度和其他特性。
全栈程序员站长
2022/07/20
3470
gsoap入门:解决axis2服务器返回错误
版权声明:本文为博主原创文章,转载请注明源地址。 https://blog.csdn.net/10km/article/details/52198306
10km
2019/05/25
1.6K0
java基础复习
Java是一个支持并发、基于类和面向对象的计算机编程语言。下面列出了面向对象软件开发的优点:
Java架构师历程
2018/09/26
1.4K0
2021最新100道Java面试题【附答案解析】
Java是一个支持并发、基于类和面向对象的计算机编程语言。下面列出了面向对象软件开发的优点:
Java程序猿
2021/01/07
4.9K0
2021最新100道Java面试题【附答案解析】
asp.net web api 向客户端返回错误信息
1使用Http状态码 ASP.NET Web Api框架提供了Http状态码的值,如下图所示。 虽然有这些预定义的状态码,但在实际项目中使用自定状态码结合预定义状态码更有优势。 通过在适当的位置抛出异
甜橙很酸
2018/03/08
2.9K0
asp.net web api 向客户端返回错误信息
Java的面试基础题(一)
Java虚拟机是一个可执行Java字节码的虚拟机进程。Java源文件被编译成能被Java虚拟机执行的字节码文件。 Java被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每一个平台单独重写或者是重新编译。Java虚拟机让这个变为可能,因为它知道底层硬件平台的指令长度和其他特性
Demo_Yang
2019/03/20
1.6K0
Java的面试基础题(一)
Java 专项练习【11- 20】(每日精进系列)
当类被 abstract 修饰时,该类一定可以被继承,而当类被 final 修饰时,说明该类是不能被继承的。如果两者同时修饰一个类,那么此时矛盾。
村雨遥
2022/06/15
5860
wcf json参数返回失败问题
      最近写了一个接口,提示连接失败,于是在本地发布了一下,然后模拟post请求进行本地调试,发现能正常进入接口,中间也没问题,一直走到最后一步return时,也能return,但是就是返回不了数据,百思不得其解,遂想是不是解析数据时报错了,后来发现此接口的返回参数类型是BaseEntity  List <Entity> 其中entity 是BaseEntity的字类,但是BaseEntity和Entity都定义一个参数HosptaiID,于是删除了字类Entitiy的参数HospitalID,接口正常了。
yaphetsfang
2020/07/30
1.2K0
当AI泡沫破裂时……
很显然我们目前处于一个不稳定的状态。这到底是一场泡沫还是一次革命?答案是当然包含一点革命——深度神经架构所创造的实实在在的成功已经颠覆了视觉和语音识别领域,更通用的机器学习也已经有了大量真实世界用例。
机器之心
2018/07/26
3760
当AI泡沫破裂时……
很显然我们目前处于一个不稳定的状态。这到底是一场泡沫还是一次革命?答案是当然包含一点革命——深度神经架构所创造的实实在在的成功已经颠覆了视觉和语音识别领域,更通用的机器学习也已经有了大量真实世界用例。
刀刀老高
2018/07/24
3600
点击加载更多

相似问题

java.rmi.UnmarshalException:解组返回头部错误;

10

RemoteException java.rmi.UnmarshalException:解组返回时出错

52

java.rmi.UnmarshalException:解组时出错

32

java.rmi.UnmarshalException:解组返回时出错;嵌套异常is:java.lang.ClassNotFoundException:

10

weblogic上下文查找错误: java.rmi.UnmarshalException:错误解组参数

26
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文