我想读取XML文件,代码如下:
执行后系统提示:
请各位帮忙看看是什么问题?
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:168)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:183)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:222)
at java.io.BufferedInputStream.read(BufferedInputStream.java:277)
at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:760)
at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:711)
at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:725)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:635)
at java.net.URL.openStream(URL.java:913)
at org.apache.xerces.impl.XMLEntityManager.startEntity(XMLEntityManager.java:740)
at org.apache.xerces.impl.XMLEntityManager.startDTDEntity(XMLEntityManager.java:700)
at org.apache.xerces.impl.XMLDTDScannerImpl.setInputSource(XMLDTDScannerImpl.java:258)
at org.apache.xerces.impl.XMLDocumentScannerImpl$DTDDispatcher.dispatch(XMLDocumentScannerImpl.java:811)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:333)
at org.apache.xerces.parsers.StandardParserConfiguration.parse(StandardParserConfiguration.java:529)
at org.apache.xerces.parsers.StandardParserConfiguration.parse(StandardParserConfiguration.java:585)
at org.apache.xerces.parsers.XMLParser.parse(XMLParser.java:147)
at org.apache.xerces.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1148)
at org.jdom.input.SAXBuilder.build(SAXBuilder.java:453)
at org.jdom.input.SAXBuilder.build(SAXBuilder.java:810)
at org.jdom.input.SAXBuilder.build(SAXBuilder.java:789)
at com.test.XmlReadTest.main(XmlReadTest.java:35)
源代码:
public static void main(String[] args) {
System.out.println("Test Begin......");
String service = null;
String method = null;
String sql = null;
try {
String className, url, uid, pwd;
className = "COM.ibm.db2.jdbc.net.DB2Driver";
url = "jdbc:db2://127.0.0.1:6789/myssip";
uid = "db2admin";
pwd = "db2admin";
Class.forName(className);
Connection cn = DriverManager.getConnection(url, uid, pwd);
sql = "delete from MAN_MENUFUNC_RELATION";
PreparedStatement ps1 = cn.prepareStatement(sql);
ps1.execute();
ps1.close();

SAXBuilder builder = new SAXBuilder();
Document doc = builder.build(new File("c:\\fire-config.xml"));
Element eroot = doc.getRootElement();
List allChildren = eroot.getChildren();
for (int i = 0; i < allChildren.size(); i++) {
Element a = (Element) allChildren.get(i);
if (a.getName().equals(new String("managed-bean"))) { List aList = a.getChildren();
for (int j = 0; j < aList.size(); j++) {
Element b = (Element) aList.get(j);
if (b.getName().equals(new String("managed-bean-name"))) {
service = b.getText();
}
if (b.getName()
.equals(new String("managed-bean-class"))) {
method = b.getText();
}
}
System.out.println("service:" + service + " === method:"
+ method);
sql = "insert into MAN_MENUFUNC_RELATION (SSERVICE,SMETHOD,IMENUID) values (?,?,?)";
PreparedStatement ps = cn.prepareStatement(sql);
ps.setString(1, method);
ps.setString(2, service);
ps.setInt(3,0);
ps.executeUpdate();
ps.close();
}
}
System.out.println("Test End......");
} catch (Exception e) {
e.printStackTrace(System.err);
}
}

解决方案 »

  1.   

    代码不全吧,你给的代码根本没用到SOCKET啊
      

  2.   

    at com.test.XmlReadTest.main(XmlReadTest.java:35) 在这个地方自己debug一下吧
      

  3.   

    connection reset一般是由于你的SOCKET的关闭了
      

  4.   

    connection reset一般是由于服务器端的socket关闭了,还有在你的代码中就没有看到有关socket通信的地方啊
      

  5.   

    我这里有关于网络异常方面的建议,发上去大家学习:
    第1个异常是java.net.BindException:Address already in use: JVM_Bind。该异常发生在服务器端进行new ServerSocket(port)(port是一个0,65536的整型值)操作时。异常的原因是以为与port一样的一个端口已经被启动,并进行监听。此时用netstat –an命令,可以看到一个Listending状态的端口。只需要找一个没有被占用的端口就能解决这个问题。第2个异常是java.net.ConnectException: Connection refused: connect。该异常发生在客户端进行new Socket(ip, port)操作时,该异常发生的原因是或者具有ip地址的机器不能找到(也就是说从当前机器不存在到指定ip路由),或者是该ip存在,但找不到指定的端口进行监听。出现该问题,首先检查客户端的ip和port是否写错了,如果正确则从客户端ping一下服务器看是否能ping通,如果能ping通(服务服务器端把ping禁掉则需要另外的办法),则看在服务器端的监听指定端口的程序是否启动,这个肯定能解决这个问题。第3个异常是java.net.SocketException: Socket is closed,该异常在客户端和服务器均可能发生。异常的原因是己方主动关闭了连接后(调用了Socket的close方法)再对网络连接进行读写操作。第4个异常是java.net.SocketException: (Connection reset或者Connect reset by peer:Socket write error)。该异常在客户端和服务器端均有可能发生,引起该异常的原因有两个,第一个就是如果一端的Socket被关闭(或主动关闭或者因为异常退出而引起的关闭),另一端仍发送数据,发送的第一个数据包引发该异常(Connect reset by peer)。另一个是一端退出,但退出时并未关闭该连接,另一端如果在从连接中读数据则抛出该异常(Connection reset)。简单的说就是在连接断开后的读和写操作引起的。第5个异常是java.net.SocketException: Broken pipe。该异常在客户端和服务器均有可能发生。在第4个异常的第一种情况中(也就是抛出SocketExcepton:Connect reset by peer:Socket write error后),如果再继续写数据则抛出该异常。前两个异常的解决方法是首先确保程序退出前关闭所有的网络连接,其次是要检测对方的关闭连接操作,发现对方关闭连接后自己也要关闭该连接。
      

  6.   

    java.net.SocketException: Connection reset 
    at com.test.XmlReadTest.main(XmlReadTest.java:35) 
    这个方法读取的时候,有没有发生阻塞.
      

  7.   

    at java.net.SocketInputStream.read(SocketInputStream.java:168) read本身就是一个阻塞函数!http://www.handandaily.com
      

  8.   

    inputstread.read(bytes[])是一个阻塞函数,如果没有接收到输入流就会阻塞住不动
    http://www.cnblogs.com/kaixin110/archive/2008/04/11/1148671.html
      

  9.   

    Connection cn = DriverManager.getConnection(url, uid, pwd);
    sql = "delete from MAN_MENUFUNC_RELATION";
    PreparedStatement ps1 = cn.prepareStatement(sql);
    ps1.execute();
    ps1.close(); 
    我觉得你后面还执行 最好先别关闭.而且的代码太好,不好说阿
    XmlReadTest.java:35  上面根本就没贴. 
    SocketException: 以前论坛里有这个问题,好像是提前关闭了Socket.
      

  10.   

    className = "COM.ibm.db2.jdbc.net.DB2Driver";com小写就OK了啊