Java - DocumentBuilder 关闭 Socket 连接

标签 java sockets connection

我遇到 Socket 连接关闭太快的问题。有人告诉我需要临时从 Socket 加载数据并解析它。这是我的代码:

ServerSocket listen = new ServerSocket(this.port);
Socket server;

while(i < this.maxConnections)
{
    server = listen.accept();
    processRequest(server);
    i++;
}

处理请求

protected void processRequest(Socket server) throws IOException
{
    ProcessXML response = new ProcessXML(server.getInputStream());

    new PrintWriter(server.getOutputStream(), true).println("response text");
}

processXML

public ProcessXML(InputStream is)
{
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    factory.setValidating(false);
    factory.setNamespaceAware(false);

    Document doc = factory.newDocumentBuilder().parse(new InputSource(is));
    ....
}

错误

[Fatal Error] :2:1: Premature end of file.
org.xml.sax.SAXParseException: Premature end of file.
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source)
at ProcessXML.<init>(ProcessXML.java:22)
at Bank.processRequest(Bank.java:41)
at Bank.listen(Bank.java:25)
at BankStart.main(BankStart.java:6)
<小时/>

现在我可以将 server.GetInputStream() 的内容存储到一个文件中,然后将其提供给 DocumentBuilder,但我认为这是一个糟糕的解决方案。如何将内容存储到某个临时存储中,并且能够在不关闭套接字的情况下将其提供给 .parse()

最佳答案

我认为您使用的解决方案期望数据在构建时可用。您需要使用流解析器。找到一个 STAX 实现,您应该能够做到这一点

关于Java - DocumentBuilder 关闭 Socket 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/797273/

相关文章:

mysql - Xampp Linux : PDOException: SQLSTATE[HY000] [2002] Connection refused in lock_may_be_available() error

java - 将 HTML 内容添加到与 JTextPane 关联的文档

Java - 换行循环

java - 是否有用于简单列表映射的 Java 8 实用程序?

Java:如何监视普通套接字连接(并将结果转发到内部记录器)

.net - Windows 版本的 "Netem"(模拟慢速网络连接)?

php - ini_set, set_time_limit, (max_execution_time) - 不工作

java - 在Scala内置的类文件上运行Java源注释处理

C 套接字 : problem with connect() and/or accept() between clients. 111:连接被拒绝

c# - sql更新不起作用