[Java] XML: StAX-Parser & DTD - Validierung deaktivieren?

Kamikatze

Captain
Registriert
Okt. 2004
Beiträge
3.708
Hey.

Hab zZ ein ziemlich ärgerliches und zugleich auch enormes Problem mit StAX.

Und zwar parse ich eine XML und sobald ich beim DTD angekommen bin, bleibt das Programm (Webapplikation) für ca. 20 Sekunden (wahrscheinlich bis zum Timeout) hängen, genau gesagt bei der Methode nextEvent().

Code:
xmle = xmler.nextEvent(); // xmler vom Typ XMLEventReader

Das Problem tritt allerdings nur auf, wenn ich in der Schule bin und eine Netzwerkverbindung besteht. Daheim bei der direkten Verbindung und wenn ich die Netzwerkverbindungen deaktiviere, hab ich das Problem nicht.

Ich vermute, dass hier etwas validiert wird und das ganze irgendwie, wie so auch immer, im Netz hängen bleibt.

Die Folge -> das Laden der Seite benötigt fast 2 Minuten -> deshalb enormes Problem. :(

Bitte um eure Hilfe, danke!
 
Hast du mal überprüft, ob das DTD korrekt in der XML-Datei steht? Vielleicht versucht er ohne Prüfung, ob eine Netzwerkverbindung besteht, über die URL ans DTD zu kommen.
Wenn dann keine Netzwerkverbindung besteht, macht er wahrscheinlich ohne DTD weiter.
Mit Netzwerkverbindung, aber mit falscher URL zum DTD findet er nichts und wartet auf den Timeout.

Das ganze ist nur 'ne Vermutung von mir (inkl. Arbeitsweise von StAX), aber daran könnte es liegen.
 
Wie gesagt, bei einer direkten Internetverbindung funktioniert das ganze. Das Timeout-Problem besteht nur im Schul-Netz incl. Proxy. Und es fehlt auch nichts ohne Verbindung.
 
Du kannst mittels
Code:
XMLInputFactory factory = XMLInputFactory.newInstance();
factory.setProperty("javax.xml.stream.isValidating", Boolean.FALSE);
die implementationsspezifische Validierung der DTD deaktivieren, probier' mal, ob's hilft.

greetings, Keita
 
Vielen Dank. Funktioniert trotzdem nicht! :heul:

Hier ein Bsp-Code:

Code:
public static String getHibernateConfigurationValue(String xmlpath, String attributeval) throws Exception {
        FileInputStream fis = new FileInputStream(xmlpath);
        XMLInputFactory xmlif = XMLInputFactory.newInstance();
        xmlif.setProperty("javax.xml.stream.isValidating", Boolean.FALSE);
        XMLEventReader xmler = xmlif.createXMLEventReader(fis);
        XMLEvent xmle = null;
        boolean found = false;
        String ret = null;
        
        while (xmler.hasNext()) {
            xmle = xmler.nextEvent();
            
            switch (xmle.getEventType()) {
                // Start eines Elements
                case XMLStreamConstants.START_ELEMENT :
                    // ...
                    break;
                    
                    // Inhalt des Elements
                case XMLStreamConstants.CHARACTERS :
                    Characters ch = xmle.asCharacters();
                    
                    if (!ch.isWhiteSpace()) {
                        if (found) {
                            ret = ch.getData();
                            found = false;
                        }
                    }
                    break;
                    
                    // Ende des XML-Dokuments
                case XMLStreamConstants.END_DOCUMENT :
                    fis.close();
                    break;
            }
        }
        
        return ret;
    }


Das Problem ist, dass die Hibernate-Konfiguration ohne DTD nicht funktioniert. Kann ich vllt. bei Hibernate irgendwie einstellen, dass Hibernate die Konfigurationsdateien auch ohne DTD annimmt? :(

Hier die aktuelle DTD:
Code:
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
 
Zuletzt bearbeitet:
Zurück
Oben