DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT <http://nagoya.apache.org/bugzilla/show_bug.cgi?id=27346>. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND INSERTED IN THE BUG DATABASE.
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=27346 Can not load schema in documents defined by a file-URI containing '|' as drive identifier machines running a Microsoft OS Summary: Can not load schema in documents defined by a file-URI containing '|' as drive identifier machines running a Microsoft OS Product: Xerces2-J Version: 2.6.2 Platform: PC OS/Version: Windows XP Status: NEW Severity: Normal Priority: Other Component: Other AssignedTo: [EMAIL PROTECTED] ReportedBy: [EMAIL PROTECTED] On Microsoft machines it is possible to use an URI to an XML-file of the type "file://c|folder1/folder2" Note the '|'-character after the drive identifier! When parsing an XML-file using such an URI Xerces-2-J (im using 2.6.2) does well. However: validating XML files referenced by such an URI containing an '|' instead of an ':' against a schema defined in the XML file causes the well known cvc-elt.1: Cannot find the declaration of element Error if (and only if) the XSD is given relative to the XML-file. Since usage of '|' in Xerces is possible validation schould work with such URIs too! Steps to reproduce: 1) create an XML-file on your local filesystem with a schema in the same folder referenced relative 2) load and parse an XML-file by providing an URI from the filesystem using "file:///c|/path" 3) validate this XML-file using normalizeDocument() change the '|' against a ':' and everything works proper again. A closer analysis shows that XMLEntityManager.expandSystemId() in package org.apache.xerces.impl instanciating an URI containing a '|' throws an URI.MalformedURIException (which is actually correct behavior for such URIs). A possible workaround -however not a good solution- is to add the code marked by >>>> 'code' <<<< in XMLEntityManager.fixURI() prior to instanciating the URI: : protected static String fixURI(String str) { : : // handle platform dependent strings : str = str.replace(java.io.File.separatorChar, '/'); >>>>>> : str = str.replace('|', ':'); <<<<<< However this workaround is 1) not very performant 2) possibly not the right place to handle such URIs 3) possibly not the only place where this should be considered (e.g. in the expandSystemId method there is code checking for ':' too) Thank you. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]