경고 : [kryo] 클래스 slade.core.Child를 kryo의 ClassLoader로로드 할 수 없습니다. 현재와 다시 시도 ... 경고 : [Kryo] 클래스 x를 Kryo 's ClassLoader로로드 할 수 없습니다.
클래스를 찾을 수 없습니다
:직렬화 추적
slade.core.Child :아이 (slade.core.Parent)
를 내가 문제 곳이 Kryo는 루트 객체 유형 내에 포함 된 사용자 정의 객체 유형을 비 직렬화하려는 경우 위의 오류를 발생시킵니다. 이는 OSGi 번들 내에서 실행하고 다른 OSGi 번들 내에서 오브젝트를 참조 할 때만 발생합니다. (필자는 OSGi 구현으로 Karaf를 사용하고 있습니다.)
이것이 클래스 로더와 관련이있는 것을 볼 수 있습니다 만, 필요한 로더를 사용하고있는 것으로 볼 수 있습니다. NetBeans 내부에서 작성된 샘플 3 프로젝트가 들어있는 타르 파일을 업로드하여 격리 된 문제를 보여줍니다. 사용자 정의 클래스 로더는 사용되지 않습니다 (샘플 코드에서 볼 수있는 것처럼).
는프로젝트 설정 : OSGi 번들이
Parent
및 Child
클래스가 포함되어
-
코어는
- 은 모두에게
롤빵 수출 OSGi 번들
- 후,
- 가
Child
의 인스턴스를 포함Parent
의 인스턴스를 생성 코어에 종속 DLE은 Kryo을 이용하여 바이트 배열로 직렬화 객체에 역 직렬화를 시도합니다 (오류가 발생한 곳입니다) - 클래스 로더 사용 :
BundleWiringImpl$BundleClassLoader
응용 프로그램
- 자바 응용 프로그램
- 는 Kryo 에 대한 종속성
- 을 가지고 핵심
- 에 종속 후 직렬화,
Child
의 인스턴스를 포함Parent
의 인스턴스를 작성 있음 Kryo를 사용하여 바이트 배열로 변환하고 객체에 성공적으로 다시 직렬화합니다. - 클래스 로더 사용 :
Launcher$AppClassLoader
이 문제를 해결하는 방법에 대한 제안은 크게 감사하겠습니다.
소스 코드는 here에서 다운로드 할 수 있습니다.
kryo 인스턴스에 클래스 로더를 설정하는 방법을 보았습니다. 그러나 시도했을 때 작동하지 않았을 것입니다. 나는 그것을 올바르게 구현하지는 않았을 지 모르지만, 나는 그것에 대해 다시 한번 살펴 보겠다. 나는 클래스 등록에 관해서 뭔가를 보았을지도 모른다라고 생각한다. 그래서 나는 더 깊이 파헤 칠 것이다. –