2012-04-26 5 views
1

로직 회로를 구축하는 프로그램을 만들고 LookupServiceProvider NetBeans 플랫폼 메커니즘을 사용하여 사용 가능한 모든 로직 요소를 UI 팔레트에 가져옵니다.Java에서 ServiceProvider 클래스 객체의 숨겨진 객체를 비 직렬화하는 방법은 무엇입니까?

모델 (MVC)에는 모든 요소의 ServiceProvider 인 BasicElement 클래스가 있습니다. 이 클래스는 공개되어 있으며, 패키지는 공개적으로 내보내지고 View 모듈에는 패키지가 종속되어 있습니다. 보기 모듈은이 모델 모듈에 대해서만 알고 있습니다. 누군가가 팩에을 @ServiceProvider로 추가 한 새로운 모듈을 추가하면 View는 Lookup 요소와 함께 발견 된 새로운 것을 팔레트에로드합니다. 그런 다음 사용자는 팔레트에서 장면으로 요소를 옮기고 회로를 만들고 저장합니다 (직렬화).

프로그램이 저장된 파일을 열려고 할 때 (deserialise 요소) 예외가 발생합니다. 왜냐하면 어떤 모듈도 요소를 가진 모듈을 알지 못하기 때문입니다 (그리고 그 모듈의 패키지는 공개적으로 내보낼 수 없습니다). 요소는 주석을 달고 사용자에게 도달하기에 충분합니다.

없는 가능성 마다 deserialise에게 새로운 요소 모듈에 종속 추가있다. 또는 일반적으로 ServiceProvider 클래스 뒤에 숨겨진 클래스 객체를 비 직렬화하는 방법이 있습니다.

답변

2

나는이 정확한 문제에 얼마 전에 직면했다. 많은 연구 끝에 ObjectInputStream에서 사용하는 클래스 로더를 변경할 수 있다는 것을 알게되었습니다. 내 솔루션을 자세히 설명하는 주제에 대한 내 블로그 게시물을보십시오. http://www.pellissier.co.za/hermien/?p=179

+1

참고로 솔루션을 응답 자체로 이동하는 것이 가장 좋습니다. – MikeTheLiar

관련 문제