XML: JDOM + builder.build() hängt einfach

Status
Nicht offen für weitere Antworten.

jollyroger

Bekanntes Mitglied
Moin moin,

ich würde gern mit folgender simpler main-Methode + JDOM ein xml-Dokument parsen:

Code:
	public static void main(String[] args) throws JDOMException, IOException {
		
		// log configuration
		PropertyConfigurator.configure("conf/log4j.properties");
		logger =  Logger.getLogger(MCTool.class);
		// load amq default
		logger.debug("Loading Sax Builder....");
		SAXBuilder builder = new SAXBuilder(true);
		logger.debug("Loading conf/amq_default.xml....");
		Document doc = builder.build("conf/amq_default.xml");
		logger.debug("Loading AMQ arguments....");
                // do stuff....................
                }

Dummerweise bleibt es beim Aufruf "hängen", an den Logausgaben:

Code:
DEBUG [MCTool.main]: Loading Sax Builder....
DEBUG [MCTool.main]: Loading conf/amq_default.xml....

sehe ich ja eindeutig, das es an dieser Stelle hängt:

Code:
Document doc = builder.build("conf/amq_default.xml");

Die amq_default.xml sieht so aus:

Code:
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

</amq>
	
	<user>foo</user>
	<password>bar</password>
	<brokerUrl>tcp://localhost:61616</brokerUrl>
	
	<subject>CMD.debaser</subject>
	<topic>false</topic>
	
	<messageSize>255</messageSize>
	<timeToLive>255</timeToLive>
	 
	<transacted>false</transacted>
	<persistent>false</persistent>
	<clientId>mctool</clientId>  
</amq>

Mit Fehlermeldungen kann ich leider nicht dienen, da ja keine kommen.....

Jemand eine Idee woran das liegen könnte?
 
OMFG.

Den Wald vor lauter Bäumen nicht gesehen.

Aber ist das dann nicht ein Fehler im Parser?

Wieso nimmt der mir sowas ab? Ich hab doch validierung eingeschalten?

Mit einer passenden Fehlermeldung hätte ich das wohl schnell gesehen....

Danke für den Tip auf jeden Fall!
 
Hi,

Kommando zurück, es geht leider immer noch nicht....

So sieht meine xml-Datei jetzt aus:

Code:
 cat conf/amq_default.xml

Code:
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<amq>
        
        <user>foo</user>
        <password>bar</password>
        <brokerUrl>tcp://localhost:61616</brokerUrl>
        
        <subject>CMD.debaser</subject>
        <topic>false</topic>
        
        <messageSize>255</messageSize>
        <timeToLive>255</timeToLive>
         
        <transacted>false</transacted>
        
        <persistent>false</persistent>
        <!--# The purpose of the client identifier is to associate a connection and its objects
         # with a state maintained on behalf of the client by a provider.
         # The only such state identified by the JMS API is that required to support durable subscriptions.
         # A durable subscription represents a consumer registered with the topic destination that can be
         # inactive at the time the messages are sent to the topic. -->
        <clientId>mctool</clientId>
</amq>

Hmpfff, dann hing es gar nicht daran?

EDIT:

Hab gerade mal mein Dokument beim w3c validieren lassen, Ergebnis:

Code:
Schema validating with XSV 3.1-1 of 2007/12/11 16:20:05

    * Target: file:/usr/local/XSV/xsvlog/tmph8mWnGuploaded
         (Real name: amq_default.xml)
    * docElt: {None}amq
    * No declaration for document root found, validation was lax
    * The schema(s) used for schema-validation had
        no errors
    * No schema-validity problems were found in the target

Soweit also auch in Ordnung so wie ich das verstanden habe.

EDIT 2:

Lasse ich die DTD weg, kriege ich:

Code:
DEBUG [MCTool.main]: Loading Sax Builder....
DEBUG [MCTool.main]: Loading conf/cmd_default.xm....
Exception in thread "main" org.jdom.input.JDOMParseException: Error on line 3 of document file:///mnt/data/workspace/test_main/conf/cmd_default.xml: Document is invalid: no grammar found.
    at org.jdom.input.SAXBuilder.build(SAXBuilder.java:501)
    at org.jdom.input.SAXBuilder.build(SAXBuilder.java:928)
    at com.wincornixdorf.esf.mctool.cli.MCTool.main(MCTool.java:37)
Caused by: org.xml.sax.SAXParseException: Document is invalid: no grammar found.
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:131)

Hmmmm...

EDIT 3:

Ok, "würgaround" gefunden:

-> Validierung abgeschalten, sprich statt:


Code:
SAXBuilder builder = new SAXBuilder(true);

Code:
SAXBuilder builder = new SAXBuilder(false);

-> DTD rausgenommen, also statt:

Code:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

Code:
<?xml version="1.0" encoding="ISO-8859-1" ?>

Offensichtlich wird versucht, die DTD über die URL zu laden, was nicht klappt weil ich hinter einem Proxy sitze?

DAS versteh ich nicht, weil so wie ich das verstanden ist diese (w3c) DTD doch bei jedem Parser eingebaut?

EDIT 4:

Auch bei der Verwendung eines alternativen Parser - Xerces - gleiches Resultat:

Code:
		SAXBuilder builder = new SAXBuilder("org.apache.xerces.parsers.SAXParser", true);

Anscheinend hab ich da wirklich was falsch und das hier

Offensichtlich wird versucht, die DTD über die URL zu laden, was nicht klappt weil ich hinter einem Proxy sitze?

DAS versteh ich nicht, weil so wie ich das verstanden ist diese (w3c) DTD doch bei jedem Parser eingebaut?

trifft das Problem.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben