![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Alar |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 20.7.2005 Где: г. Пермь Репутация: нет Всего: нет |
Следующий тестовый пример. Два приложения, одно создает класс и сериализует его в файл, другое читает. Хотелось бы, чтобы второе ничего не знало о реализации интерфейса IFoo и работало только через интерфейс.
Вот тексты: Приложение №1. В classpath содержит второе приложение для доступа к IFoo
Приложение №2: IFoo.java:
Loader.java:
При загрузке получаю java.lang.ClassNotFoundException: bla.bla.bla.Serializator$Foo. В-общем-то понятно почему: Loader не может загрузить класс Foo. Но хотелось бы как-нибудь реализовать подобную схему. То есть загрузить объект и работать с ним только через интерфейс, а про класс ничего не знать. Куда рыть? :-) Это сообщение отредактировал(а) Alar - 20.7.2005, 11:13 |
||||||
|
|||||||
| anonymouse |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 197 Регистрация: 18.8.2004 Репутация: нет Всего: 1 |
--------------------
Много чего интересного... |
|||
|
||||
| Alar |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 20.7.2005 Где: г. Пермь Репутация: нет Всего: нет |
anonymouse, нет не в этом дело. Так я уже пробовал (сначала класс Foo был вообще в отдельном файле). Впрочем как "для галочки" попробовал безымянным классом, через абстрактный класс (вместо интерфейса).
|
|||
|
||||
| tux |
|
|||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 31 Всего: 132 |
В любом случае класс должен лежать в Class-Path, и при вызове Serializator и при вызове Loader, информация о том какой именно это класс тоже записывается при сериализации. А вот упоминать сам класс в Loader совсем необязательно, достаточно интерфейса.
|
|||
|
||||
| anonymouse |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 197 Регистрация: 18.8.2004 Репутация: нет Всего: 1 |
У тебя вообше с нормаьлным классом без интерфейса работает ?
--------------------
Много чего интересного... |
|||
|
||||
| Alar |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 20.7.2005 Где: г. Пермь Репутация: нет Всего: нет |
Это-то понятно. Проблема как раз в том, что небходимо, чтобы класс не лежал в classpath.
Работает и с интерфейсом, если класс Foo затолкать в classpath. |
||||
|
|||||
| tux |
|
|||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 31 Всего: 132 |
Так не получится, откуда JVM узнает инфу о классе? При сериализации байт-код не сохраняется. Единственное, что могу предложить - написать свой собственный мудреный класс-лоудер, который будет грузить класс не из Class-Path, а откуда-то из другого места, по ссылке из сети, например. |
|||
|
||||
| Alar |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 20.7.2005 Где: г. Пермь Репутация: нет Всего: нет |
а как это вообще делается? а можно ли сделать так:
... а другое приложение его считает? |
||||
|
|||||
| batigoal |
|
||||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 24 Всего: 151 |
Посмотри тут: Writing Your Own ClassLoader Ну и доку: http://java.sun.com/j2se/1.5.0/docs/api/ja...lassLoader.html
А потом восстановить его через Class.forName()? Смелая мысль. Может, попробуешь? Интересно... -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
||||
|
|||||
| Alar |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 20.7.2005 Где: г. Пермь Репутация: нет Всего: нет |
Попробовал. Защита от извращенцев работает На попытку загрузить класс:
ЗЫ. за ссылки - спасибо, почитаю. Это сообщение отредактировал(а) Alar - 20.7.2005, 13:09 |
||||
|
|||||
| tux |
|
|||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 31 Всего: 132 |
Вот здесь я выкладывал пример загрузчика классов:
http://forum.vingrad.ru/index.php?showtopic=53371&hl=
Опять-таки ведь в поток запишется состояние объекта, а не байт-код класса. А вот найти в Class-Path нужный класс и записать в поток байт-код можно попробовать. Хотя я себе не представляю задачу, где это нужно. Неужели проще это реализовать, чем передать клиенту jar с нужным классом? |
|||
|
||||
| kashka |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 117 Регистрация: 29.11.2004 Где: Wolfenbuettel, Ge rmany Репутация: 1 Всего: 1 |
Странно а у меня все работает.
Hello, world!!! |
|||
|
||||
| Alar |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 20.7.2005 Где: г. Пермь Репутация: нет Всего: нет |
Hello, kashka!!! Ты просто не выполнил(а) условия: нужно, чтобы первый проект видел второй (classpath), а второй НЕ видел первый. В этом смысл. Если второму добавить первый в classpath или вообще все спихать в один, то конечно все будет работать. По теме: похоже простыми способами проблема не решается. Спасибо всем ответившим. |
|||
|
||||
| tux |
|
|||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 31 Всего: 132 |
To Alar
В общем идея такая... Пусть сервер - это Serializator, клиент - Loader. Для того, чтобы в клиенте получить класс, которого нет в Class-Path можно реализовать следующее: на сервере:
|
|||
|
||||
| zone51 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 370 Регистрация: 17.2.2006 Репутация: нет Всего: 1 |
Кстати вот у меня анаог проблема встала. Есть клиент и есть сервер. Сервер посылает клиенту обьект-мой класс. Причем с заранее установленными полями. И выскакивает такой же эксепшн что не найден класс. Прошу если кто решил эту проблему напишите или посоветуйте еще чтонить. Спасибо.
-------------------- The truth is out there |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |