簡體   English   中英

通過RMI從服務器上的方法調用隱藏實現超類發送接口對象?

[英]Sending over Interface Object from method call hiding implementation super class on server via RMI?

說我有SuperNode類和一個Node接口:

SuperNode implements Node

我有一個RMI-Implementation服務器端,我試圖從一種方法發送節點,而用戶沒有SuperNode的源文件,但他們確實有Node接口。

public Node RMIImplServer.getNode();

當我這樣做時,我得到這個錯誤:

java.rmi.UnmarshalException:錯誤解組返回; 嵌套的異常是:java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod( java.rmi.server.RemoteObjectInvocationHandler.invoke的未知源(com.sun.proxy。$ Proxy0.getDataNodes的未知源)(未知源)原因:java.lang.ClassNotFoundException:SEHT.somepackage.SuperNode(沒有安全管理器:禁用了RMI類加載器),位於java.rmi.server.RMIClassLoader $ 2.loadClass(未知源)的sun.rmi.server.LoaderHandler.loadClass(未知源),位於sun.rmi.server.LoaderHandler.loadClass(未知源) java.io.ObjectInputStream.readNonProxyDesc(未知源)處的sun.rmi.server.MarshalInputStream.resolveClass(未知源)處的java.rmi.server.RMIClassLoader.loadClass(未知源)java.io.ObjectInputStream.readClassDesc(未知源) )在java.io.ObjectInputStream.readOrdinaryObject(未知源 e)在java.io.ObjectInputStream.readObject0(未知源)在java.io.ObjectInputStream.readObject(未知源)在sun.reflect.NativeMethodAccessorImpl.invoke0(本地方法)在java.util.ArrayList.readObject(未知源)在sun.reflect.NativeMethodAccessorImpl.invoke(未知源)在sun.reflect.DelegatingMethodAccessorImpl.invoke(未知源)在java.lang.reflect.Method.invoke(未知源)在java.io.ObjectStreamClass.invokeReadObject(未知源)在java.io.ObjectInputStream.readSerialData(未知源)在java.io.ObjectInputStream.readOrdinaryObject(未知源)在java.io.ObjectInputStream.readObject0(未知源)在java.io.ObjectInputStream.readObject(未知源) .rmi.server.UnicastRef.unmarshalValue(未知來源)...還有5個

我正在嘗試做的事情是可能的,如果我做錯了什么,我們將不勝感激。

最終弄清楚了...由於我沒有檢查過愚蠢的默認設置,jar文件未包含正確的文件。 非常感謝EJP的幫助。

客戶端不需要任何源文件。 但是,它確實需要遠程方法返回的所有類型的目標文件(.class)文件,這些文件可在其CLASSPATH上使用, 除非:

...如果您不想部署SuperNode.class或在客戶端上部署它,則可以使用代碼庫功能。 情況很復雜。

  1. 您將需要在客戶端安裝安全管理器。
  2. 您將需要在服務器JVM上定義系統屬性java.rmi.server.codebase
  3. 您將需要將其設置為客戶端可理解的一個或多個URL,並命名JAR文件,其中包含要動態加載的類。 通常,代碼庫項目是HTTP URL。 請注意,引用服務器本地文件系統的代碼庫項無法工作,因為客戶端無法理解。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM