# java.net.MalformedURLException: no protocol .



## Randall (4. Apr 2005)

Ich parse ein XML Document, das ich mit einem JFileChooser auswähle.

Bei mir funktioniert das tiptop ( aus der Eclipse umgebung raus).

Beim Kunden ergibt sich aber ein Fehler (IOException):

java.net.MalformedURLException: no protocol: acc_200.dtd 

wobei acc_200.dtd die Zugehörige DTD Datei für das XML file ist.

Hier der Codeausschnitt des Parsers:



```
public void parseDocument(File xmlFile){
		
		/****************************************
		 * Das File wird geparst                *
		 ****************************************/
		konto="0";		
		boolean loadFile =xmlFile.canRead();		
		
		if(loadFile==true){
			try{
				DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
				factory.setValidating(false);
				factory.setNamespaceAware(false);
				DocumentBuilder builder = factory.newDocumentBuilder();				
				document = builder.parse(xmlFile);
				Element root = document.getDocumentElement();	
				
			}
			catch(SAXException sexc){
				System.out.println("Fehler: "+sexc);
				SukeMessageFrame smf = new SukeMessageFrame("Fehler 1: "+sexc);
			}
			catch(ParserConfigurationException pce){
				pce.printStackTrace();
				SukeMessageFrame smf = new SukeMessageFrame("Fehler 2: "+pce);
			}
			catch(IOException ioe){
				ioe.printStackTrace();
				SukeMessageFrame smf = new SukeMessageFrame("Fehler 3: "+ioe);
			}
			catch(Throwable t){
				t.printStackTrace();
				SukeMessageFrame smf = new SukeMessageFrame("Fehler 4: "+t);
			}
		}
		
		else {
			SukeMessageFrame smf = new SukeMessageFrame("Die ausgewählte Datei existiert nicht oder kann nicht gelesen werden!");
		}

.............
```

Danach folgt weiterer Code zur Verarbeitung des geparsten Documents, soweit kommt er aber ja gar nicht.

Woran kann es liegen, dass es bei mir mit den genau gleichen XML und DTD Dateien klappt und beim Kunden nicht?


----------



## Randall (4. Apr 2005)

warum igoniert er überhaupt die DTD nicht? hab doch 

setValidating(false)

gesetzt?


----------



## Bleiglanz (5. Apr 2005)

wie sieht den der DOCTYPE aus?

bei dir lokal liegt die DTD eben zufällig relativ zum Instanzdokument an der richtigen Stelle, d.h. der Parser kann sie finden über den Pfad

beim kunden wird die dtd datei eben gar nicht vorhanden sein?!

verwende ggf. einen EntityResolver und/oder einen ErrorHandler, um das abzuwürgen


----------



## Guest (5. Apr 2005)

Eigentlich sieht das beim Kunden genau gleich aus, d.h. xml und dtd liegen im gleichen Verzeichnis. 

Aber wieso sucht er die dtd überhaupt, wenn ich den Parser auf "nicht validieren" eingestellt habe?


----------



## Guest (5. Apr 2005)

Der Doctype des xml - Files? Der sieht so aus:

<!DOCTYPE IC SYSTEM "acc_200.dtd">


----------



## Bleiglanz (5. Apr 2005)

sind evtl. entities drin?

gleiche JVM? gleicher Parser??


----------



## Randall (7. Apr 2005)

Was ist den genau ein EntityResolver und was macht der?

Die dtd wird ja gefunden, sonst würde irgendetwas von not found.. stehen. Richtig? Also muss der Fehler doch in der dtd liegen? Oder sehe ich das falsch?


----------



## Randall (7. Apr 2005)

was heisst die Fehlermeldung genau. Es handelt sich ja um eine IOException, hat also doch nichts direkt mit dem parsen zu tun?


----------



## Bleiglanz (7. Apr 2005)

kommen da irgendwelche entities vor

etwa

& externe datei;

um eine externe datei einzubinden?

oder 

& acute;

versehentlich html vorausgesetzt?

um solche dinger aufzulösen, braucht der parser die DTD


----------



## Randall (8. Apr 2005)

Wo meinst du html vorusgesetzt?


----------



## Bleiglanz (8. Apr 2005)

mache leute schreiben so sachem wie &auml; in ihre xml dateien in der Hoffnung, dass irgendwer das kennt

=> ist (ausser bei HTML dokumenten) nicht automatisch der Fall


----------



## PhantomXXL (8. Apr 2005)

am besten encode auf iso-8859-1 ändern und nur standard sachen wie das &, < und > verändern, die codierung erkennt ä usw


----------



## Randall (8. Apr 2005)

iso-8859-1 ist angegeben.

Es handelt es um einen Kontoauszug der Post in XML File von dem ich Zahlungen in die Datenbank einlesen. Da kommt jeden Tag so ein xml-File. Ich kann dem Benutzer schlecht zumuten, dass er da das File manipulieren geht. 

Ich denke ich muss mal das File durchforsten, was es denn sein könnte, dass er das dtd - File braucht. 

Validieren hab ich ja auf false gestellt. 

Aber eigentlich heisst ja die Fehlermeldung, dass er das dtd File nicht finden kann..oder? Protocol fehlt.. bezieht sich das auf file: //  ?


----------

