- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
全民类(class)
package Task2;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class IdCl extends UnicastRemoteObject {
private int id;
private String name;
protected IdCl() throws RemoteException {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void setId(int id) {
this.id = id;
}
}
客户端接口(interface)
package Task2;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface ClientInt extends Remote {
public void printMe(String s) throws RemoteException;
public void onePrint(String s) throws RemoteException;
}
客户端类
package Task2;
import java.io.Serializable;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class ClientCl extends UnicastRemoteObject implements ClientInt {
protected ClientCl() throws RemoteException {
}
public void printMe(String s) throws RemoteException {
System.out.println(s);
}
public void onePrint(String s) throws RemoteException {
System.out.println(s);
}
}
客户端
package Task2;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
public class Client {
protected Client() throws RemoteException {
}
public synchronized static void main(String[] args) throws IOException {
ServInt servInt = null;
if (System.getSecurityManager()==null){
System.setSecurityManager(new SecurityManager());
}
try {
Registry registry = LocateRegistry.getRegistry("localhost",Registry.REGISTRY_PORT);
servInt= (ServInt) Naming.lookup("server");
}catch (Exception e){
System.err.println(e);
e.printStackTrace();
}
IdCl idCl = new IdCl();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("What is your name?");
idCl.setName(br.readLine());
ClientInt clientInt = new ClientCl();
// servInt.someNew(clientInt);
servInt.connect(idCl, clientInt);
}
}
服务器接口(interface)
package Task2;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface ServInt extends Remote {
public void connect(IdCl idCl, ClientInt clientInt)throws RemoteException;
public void someNew(ClientInt clientInt)throws RemoteException;
}
服务器类
package Task2;
import java.io.Serializable;
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.util.Vector;
public class ServCl extends UnicastRemoteObject implements ServInt {
protected int bw = 100000;
private Vector<ClientInt> serverlist;
protected ServCl() throws RemoteException {
}
public void someNew (ClientInt clientInt) throws RemoteException {
serverlist.addElement(clientInt);
}
@Override
public void connect(IdCl idCl, ClientInt clientInt) throws RemoteException {
if (!serverlist.contains(clientInt)) {
serverlist.addElement(clientInt);
idCl.setId((int)Math.random()*bw);
print(clientInt);
}
else {
clientInt.onePrint("Hello from the server "+clientInt.getClass().getName());
}
}
public void print(ClientInt clientInt) throws RemoteException {
for (int i = 0; i < serverlist.capacity(); i++) {
if (!(clientInt.equals(serverlist.get(i)))) {
clientInt.printMe("Hello from " + serverlist.get(i).getClass().getName()+". Nice to meet you "+clientInt.getClass().getName());
}
}
}
}
服务器
package Task2;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;
public class Server {
public static void main(String[] args) throws InterruptedException {
if (System.getSecurityManager()==null){
System.setSecurityManager(new SecurityManager());
}
try {
Registry registry = LocateRegistry.createRegistry(Registry.REGISTRY_PORT);
ServInt servInt = new ServCl();
registry.rebind("server",servInt);
}catch (Exception e){
System.err.println(e);
e.printStackTrace();
}
Thread.sleep(5000);
}
}
错误1
Exception in thread "main" java.lang.IllegalArgumentException: argument type mismatch
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:357)
at sun.rmi.transport.Transport$1.run(Transport.java:200)
at sun.rmi.transport.Transport$1.run(Transport.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:196)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:568)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:826)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:683)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:682)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:283)
at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:260)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:161)
at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:227)
at java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:179)
at com.sun.proxy.$Proxy0.connect(Unknown Source)
at Task2.Client.main(Client.java:34)
如果我从所有类中删除 - UnicastRemoteObject 和所有同步方法并使用“服务器”UnicastRemoteObject.ExportObject 我将得到以下内容:
Exception in thread "main" java.rmi.MarshalException: error marshalling arguments; nested exception is:
java.io.NotSerializableException: Task2.IdCl
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:157)
at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:227)
at java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:179)
at com.sun.proxy.$Proxy0.connect(Unknown Source)
at Task2.Client.main(Client.java:34)
Caused by: java.io.NotSerializableException: Task2.IdCl
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)
at sun.rmi.server.UnicastRef.marshalValue(UnicastRef.java:290)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:152)
... 4 more
人们)我需要你的帮助)我误解了什么?我想念什么?
感谢大家的帮助。我添加到 IdCl 扩展 Serializible ant 它开始工作。
但我还有另一个问题))这是
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 1
at java.util.Vector.get(Vector.java:748)
at Task2.ServCl.print(ServCl.java:35)
at Task2.ServCl.connect(ServCl.java:24)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:357)
at sun.rmi.transport.Transport$1.run(Transport.java:200)
at sun.rmi.transport.Transport$1.run(Transport.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:196)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:568)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:826)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:683)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:682)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:283)
at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:260)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:161)
at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:227)
at java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:179)
at com.sun.proxy.$Proxy0.connect(Unknown Source)
at Task2.Client.main(Client.java:34)
好吧,我将方法 serverlist.capacity 替换为 serverlist.size....我的愚蠢错误)
最佳答案
关于第一个问题,您更改了远程接口(interface),而没有重新编译或重新部署客户端代码,客户端代码不应再编译,除非您更改了它,在这种情况下,您仍然没有重新编译或重新部署它。
第二种情况改变了应用程序的语义,因为 IdCl
变成了一个非远程对象,这是完全不同的情况。不清楚您为什么建议这样做。
只需清理、构建、修复和重新部署即可。
根据您的评论,将 Serializable
添加到 ClientInterface
完全没有任何效果,因为 ClientCl extends UnicastRemoteObject
其中 (a) 已经是 Serialized
和 (b) 永远不会被序列化,因为它是通过构造导出的远程对象。你需要按照我的回答中所说的去做。当您调用 ClientCl
的方法时,它们会在导出 ClientCl
的主机上进行打印。否则这不是真正的代码。
关于java - Rmi 错误 IllegalArgumentException、MarshalException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49294521/
每当我尝试从客户端调用我的 ejb 时,都会收到此错误: java.rmi.MarshalException: Failed to communicate. Problem during
全民类(class) package Task2; import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObjec
我正在使用 jbossIDE Eclipse 1.6。部署我的 .ear 应用程序时,我收到 java.rmi.MarshalException。 令人惊讶的是,就在几分钟前,一切都还好。 感觉jbo
全民类(class) package Task2; import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObjec
我配置了 jmeter 来运行使用 Azure Windows 虚拟机分发的测试。所有机器都使用 Windows。 使用 GUI 模式成功运行了测试,我可以将结果保存在 master 上但是,当我尝试
我的问题是当我尝试创建甚至查看积分包时出现的错误消息。 这是我在 glassfish 中遇到的错误消息。 Caused by: Exception [EclipseLink-4002] (Eclips
我刚刚用 java rmi 完成了一个小程序,但不知何故它不起作用。每次我想启动服务器时,我都会收到 MarshalException。关于如何实现远程方法调用的接口(interface),有什么我应
本文整理了Java中org.eclipse.persistence.exceptions.XMLMarshalException.marshalException()方法的一些代码示例,展示了XMLM
我编写了简单的 RMI 代码来了解它的工作原理。 虽然编译 java 代码一切正常,但 rmic 它并运行 rmiregistry 并从控制台运行客户端代码工作正常,但是当我选择在 Eclipse 的
我遇到了异常,正在寻找解决方案,我们将不胜感激。在其他一些消息中发现了同样的问题,但它们对我不起作用。请看下面的代码。 javax.xml.bind.MarshalException - with
我正在尝试使用也有几个图像的 JSP 页面添加项目。我声明了变量以将图像检索为字符串,这样我就可以获得 URL 并将该 URL 存储在数据库中。 我将 EJB 和 JPA 用于数据库用途。 我的 se
我正在尝试将 spring-data-mongodb 与 spring-hateoas 一起使用,并通过测试获得 javax.xml.bind.MarshalException 异常。我该如何解决这个
我正在研究我提到的 Jersey 服务 here当我返回一个 java 对象时它工作正常。后来我试图使 java 对象通用它给出异常javax.ws.rs.WebApplicationExceptio
我在 cassandra 中有一个表,其中有一列 MAP 类型(即 source_id_map map ) 当我尝试从此表中读取一行时,我发现读取 map 类型的列时出现一些问题,如下所示 Cause
我正在尝试学习 ejb 3,并在下面提到的场景中遇到一个我无法弄清楚的问题。 我有一个实体(图书)来存储图书相关数据。 我创建了无状态 Bean 和远程接口(interface),并将 jar 部署到
我有一个通用的 Web 服务,它需要一个 WebServiceRequest 对象。该对象具有 Object 类型的有效负载。以下是我的有效载荷的类型。 我为
我似乎对 Jax-WS 和 Jax-b 一起玩得很好有疑问。我需要使用具有预定义 WSDL 的 Web 服务。执行生成的客户端时,我收到以下错误: javax.xml.ws.WebServiceExc
我是一名优秀的程序员,十分优秀!