This is the same issue as the one described here:
http://junlu.com/msg/38980.html
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.
| [org.apache.xerces.impl.XMLEntityManager]
| 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.
| [org.jboss.net.protocol.file.FileURLConnection]
| public void connect() throws IOException
| {
| if (connected)
| return;
|
| 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
| {
| super(url);
| 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);
| }
| sb.append(filename);
| file = new File(sb.toString());
| doOutput = false;
| }
|
<a
href="http://www.jboss.org/index.html?module=bb&op=viewtopic&p=3827168#3827168">View
the original post</a>
<a
href="http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=3827168>Reply
to the post</a>
-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials
Free Linux tutorial presented by Daniel Robbins, President and CEO of
GenToo technologies. Learn everything from fundamentals to system
administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click
_______________________________________________
JBoss-user mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-user