2010-08-10 5 views
0

Я пишу сервлет, который получает XML-файл, передает его другому классу и возвращает html-файл с некоторыми комментариями клиенту. Я получаю ввода-XML с чем-то вроде:сервлет: преобразовать ServletInputStream в FileInputStream

input = request.getInputStream();

, но этот вход является ServletInputStream, а другой класс (для комментариев) нуждается в FileInputStream.

Если я даю XMLEventReader (в другом классе) в ServletInputStream, я получаю ошибку синтаксического анализа:

ParseError at [row,col]:[1,1] 
Message: Content is not allowed in prolog. 

И я думаю, что это из-за ServletInputStream вместо FileInputStream.

Привет я надеюсь, что кто-то может помочь мне :)

ответ

0

вы должны прочитать данные из ServletInputStream и выгрузить его в FileOutputStream. таким образом, вы можете посмотреть данные, которые отправляются, а затем проверить эти данные отдельно с помощью FileInputStream с классом, который вы описали, который ему нужен. я предполагаю, что произойдет то же самое, что и сейчас, так как, как и предыдущий плакат, данные, вероятно, находятся в неправильном формате.

+0

Если я запустил «класс комментариев» с чем-то вроде input = FileInputStream («локальный путь к xml-файлу»), все работает, но если я дам ему тот же xml через сервлет (servletinputstream) для этого класса, я получаю ошибка синтаксического анализа. Итак, xml-файл должен быть правильным. Возможно, это помогает в том, что ошибка синтаксического анализа возникает во втором узле. первая версия '' работает явно – Graslandpinguin

+0

, вы, вероятно, не учитываете заголовки http в ответе. – aepurniet

3

Я думаю, что это маловероятно, что последняя задача из-за его более ServletInputStream. Парсер не должен заботиться об источнике данных.

Я думаю, что более вероятно, что данные во входном потоке неверны.

Ваш класс, который в настоящее время требует FileInputStream должен быть переработан, чтобы работать с InputStream если все возможно ... в противном случае вам придется записать данные фактического файла первого, который, очевидно, не является идеальным.

+0

окей, я изменил входы в «InputStream», но та же проблема Есть ли возможность преобразовать ServletInputStream в строку, что я могу посмотреть, если есть небольшая разница между ним и оригиналом xml-файл? – Graslandpinguin

+0

Используйте 'InputStreamReader'. Не забывайте учитывать кодировку символов. Далее я думаю, что настало время пройти через учебник по Java IO (http://java.sun.com/docs/books/tutorial/essential/io/). Он объясняет, что вам нужно знать. – BalusC

+0

@CaptnLenz: Я предлагаю вам просто записать данные на диск и посмотреть там. Откройте «FileOutputStream» и просто прочитайте блок за раз из входного потока, записав его в выходной поток. Затем вы можете посмотреть файл. –

0

Хорошо, теперь я немного умнее :) Проблема: в ServletInputStream находится в начале (и в одной строке в конце) некоторую информацию заголовка (как тип содержимого и т. Д.). Есть ли разумное решение для резки этой информации?

привет

+1

Новый вопрос должен идти в новом вопросе, а не в новом ** ответе **. Это не форум. Вы должны удалить этот «ответ», иначе он может быть опущен. На ваш начальный вопрос уже был дан ответ. Не забудьте отметить * фактический * ответ, который * на самом деле * помог решить проблему, нажав на галочку с левой стороны. См. Также http://stackoverflow.com/faq. – BalusC