今天參考了一下網上Rhello示例,搞了一下RMI測試。
server端是 java8
client 段是java6
然后 運行報錯:
java.rmi.UnmarshalException: error unmarshalling return; nested exception is:
java.lang.ClassNotFoundException: com.sap.oms.api_order.api_invoice.rmi1.IQrCodeScanner (no security manager: RMI class loader disabled)
at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
at java.rmi.Naming.lookup(Unknown Source)
at com.test.rmi.QrCodeScannerClient.main(QrCodeScannerClient.java:22)
Caused by: java.lang.ClassNotFoundException: com.test.rmi1.IQrCodeScanner (no security manager: RMI class loader disabled)
at sun.rmi.server.LoaderHandler.loadProxyClass(Unknown Source)
at java.rmi.server.RMIClassLoader$2.loadProxyClass(Unknown Source)
at java.rmi.server.RMIClassLoader.loadProxyClass(Unknown Source)
at sun.rmi.server.MarshalInputStream.resolveProxyClass(Unknown Source)
at java.io.ObjectInputStream.readProxyDesc(Unknown Source)
at java.io.ObjectInputStream.readClassDesc(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
... 3 more
剛開始沒有仔細查看報錯,上網查了一陣,美搞后,后來發現,原來是客戶端的rmi接口所在包名不對。
原來: RMI 有要求, 客戶端和服務端使用的服務接口類, 包名必須一樣。
再返回報錯信息仔細看,客戶端報錯信息里面提示沒有找到的類名,里面有包名全路徑, 是服務端的包名字符串。大意了。