0 Replies Latest reply on Mar 23, 2004 7:20 PM by ssotangkur2

    JBoss-Jetty 3.0.x fails to startup with latest version of Xe

    ssotangkur2 Newbie

      This is the same issue as the one described here:

      Basically, if your path to jbossweb.sar contains a space like C:\Program Files\jboss\server\default\deploy\jbossweb.sar then Xerce's XMLEntityManager.setupCurrentEntity() will call expandSystemId() on the filename and convert all spaces to '%20'. This eventually causes the server to fail startup because it cannot find the webdefault.xml file.

      public String setupCurrentEntity(String name, XMLInputSource xmlInputSource, boolean literal, boolean isExternal)
       throws IOException, XNIException {
       String expandedSystemId = expandSystemId(literalSystemId, baseSystemId, fStrictURI);

      When retrieving this file, the call to open the file gets delegated to JBoss's FileURLConnection class, which is instantiated with a url.

      URL location = new URL(expandedSystemId);
      URLConnection connect = location.openConnection();
      stream = connect.getInputStream();

      When it tries to get the inputStream, FileURLConnection will throw an error when it tries to see if the file exists. Thats because the underlying class is a regular java.io.File with a slightly modified filename, although it still has the '%20' in lieu of the space. This '%20' is causing file.exists() to return false.

       public void connect() throws IOException
       if (connected)
       if (!file.exists())
       throw new FileNotFoundException(file.getPath());
       connected = true;

      So we need to either fix the call to expandSystemId() to not urlencode the spaces or fix FileURLConnection to unencode the '%20'.

      As a temporary fix I modified the constructer for FileURLConnection to decode the '%20'.

       public static final String HTML_SPACE = "%20";
       public FileURLConnection(final URL url)
       throws MalformedURLException, IOException
       String filename = url.getFile().replace('/', File.separatorChar).replace('|', ':');
       // Remove '%20' from filenames and replace with space ' '
       int idx = filename.indexOf(HTML_SPACE);
       StringBuffer sb = new StringBuffer();
       while(idx > 0) {
       sb.append(filename.substring(0, idx));
       sb.append(' ');
       filename = filename.substring(idx + HTML_SPACE.length(), filename.length());
       idx = filename.indexOf(HTML_SPACE);
       file = new File(sb.toString());
       doOutput = false;