我想读取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);
}
}
执行后系统提示:
请各位帮忙看看是什么问题?
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个异常是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后),如果再继续写数据则抛出该异常。前两个异常的解决方法是首先确保程序退出前关闭所有的网络连接,其次是要检测对方的关闭连接操作,发现对方关闭连接后自己也要关闭该连接。
at com.test.XmlReadTest.main(XmlReadTest.java:35)
这个方法读取的时候,有没有发生阻塞.
http://www.cnblogs.com/kaixin110/archive/2008/04/11/1148671.html
sql = "delete from MAN_MENUFUNC_RELATION";
PreparedStatement ps1 = cn.prepareStatement(sql);
ps1.execute();
ps1.close(); 我觉得你后面还执行 最好先别关闭.而且的代码太好,不好说阿
XmlReadTest.java:35 上面根本就没贴.
SocketException: 以前论坛里有这个问题,好像是提前关闭了Socket.