-1
다음 Java RMI 설정을 사용하여 분산 시스템을 개발 중입니다.Java RMI ClassCast 예외
public interface NodeOperations {
/* RMI methods */
public FingerTable getFingerTable() throws RMIException;
}
public class Node implements NodeOperations {
/* Implements all RMI methods */
/* Also holds a object of FingerTable */
FingerTable ft;
}
public class FingerTable {
/* Holds a reference to Node class which has object of 'this' FingerTable */
Node self;
}
모든 RMI 통신은 NodeOperations
인터페이스에있는 방법을 통해 수행됩니다. 특정 노드에 대해 FingerTable
객체를 반환하는 한 가지 방법이 있습니다. 그러나 클라이언트에서 해당 메서드를 호출 할 때 예외 아래에 점점. 이 문제를 어떻게 해결합니까? Node
가 원격 객체 의도되면
java.lang.ClassCastException: cannot assign instance of com.sun.proxy.$Proxy5 to field chord.FingerTable.self of type chord.Node in instance of chord.FingerTable
at java.io.ObjectStreamClass$FieldReflector.setObjFieldValues(ObjectStreamClass.java:2133)
at java.io.ObjectStreamClass.setObjFieldValues(ObjectStreamClass.java:1305)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2237)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2155)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2013)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1535)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2231)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2155)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2013)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1535)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:422)
at sun.rmi.server.UnicastRef.unmarshalValue(UnicastRef.java:326)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:175)
at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:227)
at java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:179)
at com.sun.proxy.$Proxy5.getNodeInfo(Unknown Source)
at chord.NodeTest.testTopology(NodeTest.java:108)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
심지어 그렇게 생각했지만 모든 클래스를 직렬화했습니다. – Nullpointer
이 코드는이 예외를 생성하지 않습니다. 적어도 두 가지가 빠져 있습니다. 실제 코드를 게시하십시오. – EJP