<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<META content="MSHTML 6.00.5730.11" name=GENERATOR></HEAD>
<BODY>
<DIV dir=ltr align=left><SPAN class=800504609-05012007><FONT face=Arial 
color=#0000ff size=2>URLs do not allow non-ASCII characters; they must be 
escaped using the %xx convention. The Javadoc for java.net.URL is worth reading. 
In particular:</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=800504609-05012007><FONT face=Arial 
color=#0000ff size=2></FONT></SPAN>&nbsp;</DIV>
<DIV dir=ltr align=left><SPAN class=800504609-05012007>
<P>The URL class does not itself encode or decode any URL components according 
to the escaping mechanism defined in RFC2396. It is the responsibility of the 
caller to encode any fields, which need to be escaped prior to calling URL, and 
also to decode any escaped fields, that are returned from URL. Furthermore, 
because URL has no knowledge of URL escaping, it does not recognise equivalence 
between the encoded or decoded form of the same URL. For example, the two 
URLs:<BR></P><PRE>    http://foo.com/hello world/ and http://foo.com/hello%20world</PRE>would 
be considered not equal to each other. 
<P>Note, the <A title="class in java.net" 
href="http://java.sun.com/j2se/1.5.0/docs/api/java/net/URI.html"><CODE>URI</CODE></A> 
class does perform escaping of its component fields in certain circumstances. 
The recommended way to manage the encoding and decoding of URLs is to use <A 
title="class in java.net" 
href="http://java.sun.com/j2se/1.5.0/docs/api/java/net/URI.html"><CODE>URI</CODE></A>, 
and to convert between these two classes using <A 
href="http://java.sun.com/j2se/1.5.0/docs/api/java/net/URL.html#toURI%28%29"><CODE>toURI()</CODE></A> 
and <A 
href="http://java.sun.com/j2se/1.5.0/docs/api/java/net/URI.html#toURL%28%29"><CODE>URI.toURL()</CODE></A>. 
</P>
<P>The <A title="class in java.net" 
href="http://java.sun.com/j2se/1.5.0/docs/api/java/net/URLEncoder.html"><CODE>URLEncoder</CODE></A> 
and <A title="class in java.net" 
href="http://java.sun.com/j2se/1.5.0/docs/api/java/net/URLDecoder.html"><CODE>URLDecoder</CODE></A> 
classes can also be used, but only for HTML form encoding, which is not the same 
as the encoding scheme defined in RFC2396. </P>
<P><SPAN class=800504609-05012007><FONT face=Arial color=#0000ff size=2>In your 
case you seem to be using the URL class solely in order to set the SystemID 
property on a source, starting from a File object. For that I would use the 
File.toURI() method, assuming you don't need to run on anything earlier than JDK 
1.4</FONT></SPAN></P>
<P><SPAN class=800504609-05012007><FONT face=Arial color=#0000ff 
size=2></FONT></SPAN>&nbsp;</P>
<P><SPAN class=800504609-05012007></SPAN><SPAN class=800504609-05012007><FONT 
face=Arial color=#0000ff size=2>Michael Kay</FONT></SPAN></P>
<P><SPAN class=800504609-05012007><FONT face=Arial color=#0000ff size=2><A 
href="http://www.saxonica.com/">http://www.saxonica.com/</A></FONT></SPAN></P></SPAN></DIV><BR>
<BLOCKQUOTE 
style="PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #0000ff 2px solid; MARGIN-RIGHT: 0px">
  <DIV class=OutlookMessageHeader lang=en-us dir=ltr align=left>
  <HR tabIndex=-1>
  <FONT face=Tahoma size=2><B>From:</B> jdom-interest-bounces@jdom.org 
  [mailto:jdom-interest-bounces@jdom.org] <B>On Behalf Of 
  </B>Huma<BR><B>Sent:</B> 05 January 2007 08:20<BR><B>To:</B> 
  jdom-interest@jdom.org<BR><B>Subject:</B> [jdom-interest] 
  MalformedURLException<BR></FONT><BR></DIV>
  <DIV></DIV>I have a model.xml file which I have placed in a directory 
  /home/huma/ab. But when I parse this file I get a MalformedURLException. 
  Strangely, if the same file is moved to the location /home/huma, I don't get 
  any exception. To summarize, if the xml file is in some directory that 
  contains non-english characters, I am getting a MalformedURL exception. Is 
  there some work-around? Can someone help me with this? <BR><BR>Here is the 
  code snippet:<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; final String 
  DEF_ENC = "UTF-8";&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; 
  &nbsp;&nbsp;&nbsp; String str = new 
  String("ab\u00e4\u00df\u00f6");<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
  String newStr = null;<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; try 
  {<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; newStr = new String( 
  str.getBytes(DEF_ENC), DEF_ENC);<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; str 
  = "/home/huma/" + newStr + "/model.xml"; <BR>&nbsp;&nbsp;&nbsp; 
  &nbsp;&nbsp;&nbsp; String fileName = null;<BR>&nbsp;&nbsp;&nbsp; 
  &nbsp;&nbsp;&nbsp; fileName = new String(str.getBytes(DEF_ENC), 
  DEF_ENC);<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; File file = new 
  File(fileName); <BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; File parent = 
  file.getParentFile();<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; InputStream 
  iStream = null;<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
  <BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; 
  &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; iStream = new 
  FileInputStream(file);<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
  &nbsp;&nbsp;&nbsp; InputSource is = new 
  InputSource(iStream);<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
  &nbsp;&nbsp;&nbsp; if(parent != null)<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
  &nbsp;&nbsp;&nbsp; { <BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
  &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
  is.setSystemId(parent.toURL().toString());<BR>&nbsp;&nbsp;&nbsp; 
  &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; 
  &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; SAXBuilder saxbuilder = new 
  SAXBuilder(true);<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
  Document doc = saxbuilder.build (is);<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
  &nbsp;&nbsp;&nbsp; Element root = doc.getRootElement();<BR>&nbsp;&nbsp;&nbsp; 
  &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; String version = 
  root.getAttributeValue("schemaVersion");<BR>&nbsp;&nbsp;&nbsp; 
  &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.out.println("version: " + 
  version);<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } <BR>&nbsp;&nbsp;&nbsp; 
  &nbsp;&nbsp;&nbsp; catch (FileNotFoundException e1) {<BR>&nbsp;&nbsp;&nbsp; 
  &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // TODO Auto-generated catch 
  block<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
  e1.printStackTrace();<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
  }<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; 
  &nbsp;&nbsp;&nbsp; catch (UnsupportedEncodingException e) 
  {<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // TODO 
  Auto-generated catch block <BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
  &nbsp;&nbsp;&nbsp; e.printStackTrace();<BR>&nbsp;&nbsp;&nbsp; 
  &nbsp;&nbsp;&nbsp; } catch (MalformedURLException e) {<BR>&nbsp;&nbsp;&nbsp; 
  &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // TODO Auto-generated catch 
  block<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
  e.printStackTrace();<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } catch 
  (JDOMException e) {<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
  &nbsp;&nbsp;&nbsp; // TODO Auto-generated catch block <BR>&nbsp;&nbsp;&nbsp; 
  &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
  e.printStackTrace();<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } catch 
  (IOException e) {<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
  // TODO Auto-generated catch block<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
  &nbsp;&nbsp;&nbsp; e.printStackTrace();<BR>&nbsp;&nbsp;&nbsp; 
  &nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; }<BR><BR><BR>This is the exception 
  I am getting: <BR><BR>java.net.MalformedURLException: no protocol: 
  model.dtd<BR>&nbsp;&nbsp;&nbsp; at 
  java.net.URL.&lt;init&gt;(URL.java:537)<BR>&nbsp;&nbsp;&nbsp; at 
  java.net.URL.&lt;init&gt;(URL.java:434)<BR>&nbsp;&nbsp;&nbsp; at 
  java.net.URL.&lt;init&gt;(URL.java:383)<BR>&nbsp;&nbsp;&nbsp; at 
  org.apache.xerces.impl.XMLEntityManager.setupCurrentEntity(Unknown 
  Source)<BR>&nbsp;&nbsp;&nbsp; at 
  org.apache.xerces.impl.XMLEntityManager.startEntity(Unknown 
  Source)<BR>&nbsp;&nbsp;&nbsp; at 
  org.apache.xerces.impl.XMLEntityManager.startDTDEntity(Unknown Source) 
  <BR>&nbsp;&nbsp;&nbsp; at 
  org.apache.xerces.impl.XMLDTDScannerImpl.setInputSource(Unknown 
  Source)<BR>&nbsp;&nbsp;&nbsp; at 
  org.apache.xerces.impl.XMLDocumentScannerImpl$DTDDispatcher.dispatch(Unknown 
  Source)<BR>&nbsp;&nbsp;&nbsp; at 
  org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument (Unknown 
  Source)<BR>&nbsp;&nbsp;&nbsp; at 
  org.apache.xerces.parsers.XML11Configuration.parse(Unknown 
  Source)<BR>&nbsp;&nbsp;&nbsp; at 
  org.apache.xerces.parsers.XML11Configuration.parse(Unknown 
  Source)<BR>&nbsp;&nbsp;&nbsp; at org.apache.xerces.parsers.XMLParser.parse 
  (Unknown Source)<BR>&nbsp;&nbsp;&nbsp; at 
  org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown 
  Source)<BR>&nbsp;&nbsp;&nbsp; at 
  org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown 
  Source)<BR>&nbsp;&nbsp;&nbsp; at 
  org.jdom.input.SAXBuilder.build(SAXBuilder.java :453)<BR>&nbsp;&nbsp;&nbsp; at 
  ModelTest.main(ModelTest.java:47)<BR><BR><BR></BLOCKQUOTE></BODY></HTML>