Yonggggg
798
2018-11-01 10:50:57
7
1036

직렬화 object 소켓 전달 에러 문제


리눅스 서버에 java -jar 파일을 실행해 주었습니다.


그리고 클리아언트에서 Object Serializable로 서버에 전송을 해주었습니다.

그런데 다음과 같은 에러가 뜹니다.

다음과 같은 원인이 뜨는 이유는 무엇인가요??

클래스를 찾지 못하는데, 전송되는 변수오브젝트는 모두 같은걸 확인했습니다.

또 다른 이유가 있을까요?


java.lang.ClassNotFoundException: com.nglvirtual.screening.server.ScreeningData
        at java.net.URLClassLoader$1.run(URLClassLoader.java:359)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:348)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:347)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:312)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:278)
        at java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:675)
        at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1824)
        at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1711)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1996)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1533)
        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:420)
        at com.equisnzaroo.screening.server.Receiver.run(Receiver.java:33)
0
  • 답변 7

  • 밥도둑계장
    674
    2018-11-01 10:59:59 작성 2018-11-01 11:01:06 수정됨

    com.nglvirtual.screening.server.ScreeningData 라는 클래스를 못찾는다고 나오네요..


    클래스 자체를 못찾는거같은데..


    변수는 말고 클래스이름 위치 확인해보세요.

  • 찰진소리
    164
    2018-11-01 11:01:05

    classpath에 ScreeningData라는 클래스가 없는거 아닐까요

  • Yonggggg
    798
    2018-11-01 12:10:09

    두분다 답변 감사합니다.

    패키지에 클래스도 잘 들어가져 있습니다 ㅠ 

    클라이언트에서 소켓전달할떄 screeningData 클래스 들어가는거 확인했습니다

    그런데 서버에서 screeningData 오브젝트가 null로 반환되더라구요... 뭐가 문제인지..;;


    이게 기존에 코드를 새로운 프로젝트에 복사해서 리팩토리한건데,  기존 코드에선 문제없이 돌아갑니다.

    흐음 이상하네요 ㅠ

  • Yonggggg
    798
    2018-11-01 12:15:13 작성 2018-11-01 12:16:00 수정됨

    in = new ObjectInputStream(socket.getInputStream());

    obj = in.readObject();


    서버에서 받는부분 in.readObject();  이부분이 exception 처리가 됩니다.. 흠;

  • 밥도둑계장
    674
    2018-11-01 12:33:42

    저부분이 exception 이면 in 자체가 널이란 말인데..

    소켓 접속부분 확인해보시는게..

  • 즈루시
    2018-11-01 13:36:18

    RMI 구현하신건가요?

  • Yonggggg
    798
    2018-11-01 14:04:16

    모두 답변 감사드립니다.

    해결했습니다.

    https://stackoverflow.com/questions/39683965/deserialization-of-java-object-classnotfoundexception


    서버의 screeningData.class 파일의 패키지 경로와

    클라이언트의 screeningData.class 파일의 패키지 경로가 달라서 발생했습니다.


    서로 일치시켜주니깐 되네요~!

  • 로그인을 하시면 답변 을 등록할 수 있습니다.