![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Eustace |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 20.10.2006 Репутация: нет Всего: нет |
Приветствую всех!
Столкнулся со следующей проблемой: при передаче обекта типа org.w3c.dom.Document по сети этот объект не передаётся. Исключения не наступает. Просто сервер ожидает клиента. при остановке сервера происходит ошибка ввода-вывода - но оно и понятно. Код следующий: клиент:
т.е, стандартный для таких случаев. Оговорюсь, что точно такой же код работает, если направить поток не в сеть, а в файл. Код сервера:
И вот это не парсится ни в какую! Пробовал отлаживать даже так - заливал со стороны клиента строчку и читал её на сервере. Пашет! В общем, руки опускаются. Буду рад любой помощи. |
||||
|
|||||
| Tony |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1159 Регистрация: 3.3.2006 Где: Riga Репутация: 1 Всего: 12 |
|
|||
|
||||
| Eustace |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 20.10.2006 Репутация: нет Всего: нет |
Нет, естественно.
Это означало бы закрытие сокета, а мне бы хотелось с ним ещё работать. Собственно, я нашёл обходной путь - через сериализацию. Этот метод работает. Но всё равно интересно, почему не работают API, вроде бы специально для этого написанные. |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 19 Всего: 538 |
Не работает потому, что DocumentBuilder.parse() будет читать до тех пор, пока не будет достигнут конец потока. Если парсить такой XML файл:
то парсер не остановится после </root1>, а будет парсить дальше и выдаст ошибку. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Eustace |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 20.10.2006 Репутация: нет Всего: нет |
Понятно. Спасибо.
Хорошо, что я не стал дальше пытаться работать этим методом. |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 19 Всего: 538 |
Можно конечно написать свой InputStream, который бы по получению особой последовательности байтов, выдавал бы EOS.
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Eustace |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 20.10.2006 Репутация: нет Всего: нет |
LSD, сдается мне, это ещё больший изврат, чем использование ObjectInput/OutputStream.
Но концептуально, да. |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 19 Всего: 538 |
Смотря как это делать, если определить свой формат передачи данных, с заголовком, служебными данными и т.п. А потом просто сделать возможность получать тело пакета в виде InputStream, то это уже не будет извратом. Хотя это довольно трудоемко в реализации, и возможно для данного случая просто не востребовано. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| kkorsakoff |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 378 Регистрация: 18.10.2005 Где: Санкт-Петербург Репутация: 4 Всего: 14 |
По идее можно использовать тот же HTTP, указывая всегда правильный content-length. Тем более, что с шестой jdk идет встроенный минимальный http сервер. И не надо велосипед придумывать со своим форматом вроде как. Не уверен конечно, что реализация этого сервера корректно обрабатывает протокол (в частности Content-Length), но должна по идее правильно
Добавлено @ 02:31 Предположение оказалось верным. Нашел класс реализацию InputStream - FixedLengthInputStream. Она учитывает заголовок Content-Length и после приема указанного кол-ва байт (если точнее, октетов), генерирует EOF. Это сообщение отредактировал(а) kkorsakoff - 22.12.2006, 02:36 |
|||
|
||||
| kkorsakoff |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 378 Регистрация: 18.10.2005 Где: Санкт-Петербург Репутация: 4 Всего: 14 |
Хотя блин, тебе же надо поток оставлять открытым
|
|||
|
||||
| Eustace |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 20.10.2006 Репутация: нет Всего: нет |
Да ладно. Главное - теперь известны причины, почему это не работает.
|
|||
|
||||
| DOKA |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 68 Регистрация: 13.8.2006 Репутация: нет Всего: нет |
Возникла та же проблема, что и у автора топика. Если у кого-то есть готовое решение, как это реалиизовать, поделитесь, пожалуйста.
Непонятно только, почему мой другой проект (сервлет) точно также читает и записывает XML, то всё работает... Ведь в обоих случаях потоки одинаковы, разве их обёртка (Socket к примеру) может как-то на это влиять? |
|||
|
||||
| DOKA |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 68 Регистрация: 13.8.2006 Репутация: нет Всего: нет |
UP)
|
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 19 Всего: 538 |
DOKA,
1) Не надо апать темы. Если у кто-то знает решение он и так ответит. 2) что тебе непонятно? Там вроде полностью разобрались с проблемой. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| DOKA |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 68 Регистрация: 13.8.2006 Репутация: нет Всего: нет |
LSD,
1 - ok. 2 - было сказано, что получилось реализовать это через сериализацию. И вот непонятно как можно сериализовать Document. При попытки записи его в сокет, получаю NoSerializableException. |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Работа с сетью | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |