2010-08-10 1182 views
0

我在写一个servlet,它接收一个xml文件,将它提供给另一个类,并给出一个带有一些注释的html文件给客户端。 我发现了输入的XML的东西,如:servlet:将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文件的本地路径”)的方式启动“comment-class”,一切正常,但是如果我通过servlet(servletinputstream)给这个类同样的xml,解析错误。 所以xml文件应该是正确的。 也许这有助于解析错误在第二个节点上引发。第一个<?xml version =“1.0”encoding ='UTF-8'standalone ='no'?>'明显工作 – Graslandpinguin 2010-08-10 11:08:26

+0

您可能没有考虑到响应中的http标头。 – aepurniet 2013-09-28 16:08:34

3

我认为这是不可能的,后者的问题是,由于它是一个ServletInputStream。解析器不应该关心数据的来源。

我认为这很有可能是输入流中的数据不正确。

你的类,它目前需要FileInputStream需要重构与InputStream工作,如果在所有可能......否则,你将不得不将数据写入到实际的文件首先,这显然是不理想的。

+0

好吧,我在“的InputStream”,但同样的问题 改变的输入是否有可以ServletInputStream转换为字符串,我可以看看是否有它和原来的差小的可能性xml文件? – Graslandpinguin 2010-08-10 11:13:30

+0

使用'InputStreamReader'。不要忘记考虑字符编码。更进一步,我认为现在是通过[Java IO教程](http://java.sun.com/docs/books/tutorial/essential/io/)的时候了。它解释了你需要知道的要点。 – BalusC 2010-08-10 12:01:00

+0

@CaptnLenz:我建议你只是将数据写入磁盘,然后在那里查看。打开一个'FileOutputStream',然后从输入流中一次读取一个块,将其写入输出流。然后你可以看看这个文件。 – 2010-08-10 12:30:18

0

好吧,我现在有点聪明:) 问题是:在ServletInputStream是在开始(和结束一行)一些头信息(作为内容类型等..)。 是否有切割这些信息的智能解决方案?

问候

+1

新问题应该出现在新问题中,而不是新答案**。这不是一个论坛。你应该删除这个“答案”,否则它可能会被低估。你最初的问题已经得到解答。不要忘了标记*实际*答案,实际*通过点击左边的复选标记来帮助解决问题。另见http://stackoverflow.com/faq。 – BalusC 2010-08-10 12:02:31