неизвестное исключение хоста при разборе файла xml - PullRequest
4 голосов
/ 23 октября 2010

когда я пытаюсь разобрать xml, я получаю следующее исключение: -

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.<init>(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);

Я пытаюсь разобрать xml, который был написан для hibernate, на самом деле это файл отображения hibernate.

xml, который я пытаюсь разобрать, ниже: -

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="org.hibernate.entity.Student" table="table_student">
        <id name="rollNo" column="rool_no" type="int"/>
        <property name="name" column="st_name" type="string"/>
        <set name="marks" table="table_marks">
            <key column="roll_no"/>
            <composite-element class="org.hibernate.entity.StudentMarks">
                <property name="subject" column="st_sub"/>
                <property name="marks" column="st_marks"/>
            </composite-element>
        </set>
    </class>
</hibernate-mapping>

Пожалуйста, помогите.

Ответы [ 3 ]

14 голосов
/ 23 октября 2010

Анализатор пытается загрузить DTD с hibernate.sourceforge.net для проверки проанализированного 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 .

2 голосов
/ 25 октября 2010

Я использовал следующий код, и это работает нормально для меня ..

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);
0 голосов
/ 14 августа 2015

Я также пытаюсь прочитать файл xml с тегом dtd

<!DOCTYPE grammar PUBLIC "-//W3C//DTD GRAMMAR 1.0//EN" "http://www.w3.org/TR/speech-grammar/grammar.dtd">

и кодом

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, и это решило проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...