解析xml文件时出现未知主机exception

当我试图解析一个xml时,我得到以下exception: –

java.net.UnknownHostException: hibernate.sourceforge.net at java.net.AbstractPlainSocketImpl.connect(Unknown Source) at java.net.PlainSocketImpl.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at sun.net.NetworkClient.doConnect(Unknown Source) at sun.net.www.http.HttpClient.openServer(Unknown Source) at sun.net.www.http.HttpClient.openServer(Unknown Source) at sun.net.www.http.HttpClient.(Unknown Source) at sun.net.www.http.HttpClient.New(Unknown Source) at sun.net.www.http.HttpClient.New(Unknown Source) at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source) at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source) at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source) at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source) at org.apache.xerces.impl.XMLEntityManager.setupCurrentEntity(Unknown Source) at org.apache.xerces.impl.XMLEntityManager.startEntity(Unknown Source) at org.apache.xerces.impl.XMLEntityManager.startDTDEntity(Unknown Source) at org.apache.xerces.impl.XMLDTDScannerImpl.setInputSource(Unknown Source) at org.apache.xerces.impl.XMLDocumentScannerImpl$DTDDispatcher.dispatch(Unknown Source) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source) at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) at org.apache.xerces.parsers.XMLParser.parse(Unknown Source) at org.apache.xerces.parsers.DOMParser.parse(Unknown Source) at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source) at javax.xml.parsers.DocumentBuilder.parse(Unknown Source) 

我用来解析xml的代码如下: –

 File hbmFile = new File(hbmFileName); DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.parse(hbmFile); 

我试图解析为hibernate编写的xml,实际上它是一个hibernate映射文件。

我想解析的xml如下: –

                

请帮忙。

解析器正在尝试从hibernate.sourceforge.net下载DTD以validation解析的XML。

但是,计算机上的DNS客户端由于某种原因无法解析该主机名(它在我的计算机上解析为82.98.86.175 )。

要避免此问题,您必须告诉DocumentBuilderFactory忽略DTD:

 File hbmFile = new File(hbmFileName); DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setValidating(false); dbf.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.parse(hbmFile); 

请参阅使DocumentBuilder.parse忽略DTD引用 。

我使用以下代码,这对我来说很好..

 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setValidating(false); DocumentBuilder db = dbf.newDocumentBuilder(); db.setEntityResolver(new EntityResolver() { @Override public InputSource resolveEntity(String arg0, String arg1) throws SAXException, IOException { if(arg0.contains("Hibernate")) { return new InputSource(new StringReader("")); } else { // TODO Auto-generated method stub return null; } } }); Document doc = db.parse(hbmFile); 

我也尝试从带有dtd标签的xml文件中读取

  

和代码

 File fXmlFile = new File(grammarXML); DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); Document doc = dBuilder.parse(fXmlFile); 

我得到了同样的错误。

 java.net.UnknownHostException: 

部署代码的服务器无权访问w3.org。 当我在浏览器中打开w3.org时,它打开连接超时页面。 我访问了w3.org并解决了这个问题。