santiagopg 2003/10/06 11:25:57
Modified: java/src/org/apache/xalan/xsltc/compiler Import.java
Include.java
java/src/org/apache/xalan/xsltc/dom SAXImpl.java
Log:
1. New code to map relative paths to URIs in Include.java and Import.java.
2. If SourceLoader returns null, the JAXP API states that the processor
should attempt to resolve the reference. Changed the logic to do this.
(1 and 2 should solve some of the problems we have resolving relative
paths and also using URI resolvers. More testing is needed, though).
Revision Changes Path
1.22 +30 -11
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Import.java
Index: Import.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Import.java,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -r1.21 -r1.22
--- Import.java 21 Jul 2003 02:49:33 -0000 1.21
+++ Import.java 6 Oct 2003 18:25:57 -0000 1.22
@@ -67,6 +67,7 @@
import java.io.File;
import java.net.URL;
+import java.net.MalformedURLException;
import java.util.Enumeration;
import org.apache.xalan.xsltc.compiler.util.ClassGenerator;
@@ -87,6 +88,7 @@
}
public void parseContents(final Parser parser) {
+ final XSLTC xsltc = parser.getXSLTC();
final Stylesheet context = parser.getCurrentStylesheet();
try {
@@ -103,18 +105,35 @@
InputSource input = null;
XMLReader reader = null;
+ // Initialize currLoadedDocURL using currLoadedDoc
+ URL docToLoadURL = null, currLoadedDocURL = null;
+ if (currLoadedDoc != null && currLoadedDoc.length() > 0) {
+ try {
+ currLoadedDocURL = new URL(currLoadedDoc);
+ }
+ catch (MalformedURLException e) {
+ // ignore
+ }
+ }
+
+ // Use SourceLoader if available
if (loader != null) {
- final XSLTC xsltc = parser.getXSLTC();
input = loader.loadSource(docToLoad, currLoadedDoc, xsltc);
- if (input != null)
- docToLoad = input.getSystemId();
- reader = xsltc.getXMLReader();
+ if (input != null) {
+ docToLoad = input.getSystemId();
+ reader = xsltc.getXMLReader();
+ }
}
- else {
- File file = new File(currLoadedDoc);
- if (file.exists()) currLoadedDoc = "file:"+currLoadedDoc;
- final URL url = new URL(new URL(currLoadedDoc), docToLoad);
- docToLoad = url.toString();
+
+ // No SourceLoader or not resolved by SourceLoader
+ if (input == null) {
+ docToLoadURL = (currLoadedDocURL != null) ?
+ new URL(currLoadedDocURL, docToLoad) :
+ new URL("file", "", System.getProperty("user.dir")
+ + System.getProperty("file.separator")
+ + docToLoad);
+
+ docToLoad = docToLoadURL.toString();
input = new InputSource(docToLoad);
}
@@ -125,7 +144,7 @@
parser.reportError(Constants.FATAL, msg);
return;
}
-
+
final SyntaxTreeNode root;
if (reader != null) {
root = parser.parse(reader,input);
1.26 +34 -44
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Include.java
Index: Include.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Include.java,v
retrieving revision 1.25
retrieving revision 1.26
diff -u -r1.25 -r1.26
--- Include.java 21 Jul 2003 02:49:33 -0000 1.25
+++ Include.java 6 Oct 2003 18:25:57 -0000 1.26
@@ -88,8 +88,9 @@
}
public void parseContents(final Parser parser) {
- final Stylesheet context = parser.getCurrentStylesheet();
-
+ XSLTC xsltc = parser.getXSLTC();
+ Stylesheet context = parser.getCurrentStylesheet();
+
String docToLoad = getAttribute("href");
try {
if (context.checkForLoop(docToLoad)) {
@@ -99,44 +100,41 @@
return;
}
- String currLoadedDoc = context.getSystemId();
- SourceLoader loader = context.getSourceLoader();
InputSource input = null;
XMLReader reader = null;
+ String currLoadedDoc = context.getSystemId();
+ SourceLoader loader = context.getSourceLoader();
+ // Initialize currLoadedDocURL using currLoadedDoc
+ URL docToLoadURL = null, currLoadedDocURL = null;
+ if (currLoadedDoc != null && currLoadedDoc.length() > 0) {
+ try {
+ currLoadedDocURL = new URL(currLoadedDoc);
+ }
+ catch (MalformedURLException e) {
+ // ignore
+ }
+ }
+
+ // Use SourceLoader if available
if (loader != null) {
- final XSLTC xsltc = parser.getXSLTC();
input = loader.loadSource(docToLoad, currLoadedDoc, xsltc);
- if (input != null)
- docToLoad = input.getSystemId();
- reader = xsltc.getXMLReader();
+ if (input != null) {
+ docToLoad = input.getSystemId();
+ reader = xsltc.getXMLReader();
+ }
}
- else {
- // bug 7835, patch by Stefan Kost ([EMAIL PROTECTED])
- if ((currLoadedDoc != null) && (currLoadedDoc.length() > 0)) {
- File file = new File(currLoadedDoc);
- if (file.exists()) {
- currLoadedDoc = "file:" + file.getCanonicalPath();
- }
- final URL url = new URL(new URL(currLoadedDoc), docToLoad);
- docToLoad = url.toString();
- input = new InputSource(docToLoad);
- }
- else {
- File file = new File(System.getProperty("user.dir"),
- docToLoad);
- if (file.exists()) {
- docToLoad = "file:" + file.getCanonicalPath();
- }
- else {
- final ErrorMsg msg =
- new ErrorMsg(ErrorMsg.FILE_ACCESS_ERR,
- docToLoad);
- parser.reportError(Constants.FATAL, msg);
- return;
- }
- input = new InputSource(docToLoad);
- }
+
+ // No SourceLoader or not resolved by SourceLoader
+ if (input == null) {
+ docToLoadURL = (currLoadedDocURL != null) ?
+ new URL(currLoadedDocURL, docToLoad) :
+ new URL("file", "", System.getProperty("user.dir")
+ + System.getProperty("file.separator")
+ + docToLoad);
+
+ docToLoad = docToLoadURL.toString();
+ input = new InputSource(docToLoad);
}
// Return if we could not resolve the URL
@@ -160,7 +158,7 @@
if (_included == null) return;
_included.setSourceLoader(loader);
- _included.setSystemId(docToLoad);
+ _included.setSystemId(docToLoadURL.toString());
_included.setParentStylesheet(context);
_included.setIncludingStylesheet(context);
_included.setTemplateInlining(context.getTemplateInlining());
@@ -188,14 +186,6 @@
}
}
}
- }
- catch (FileNotFoundException e) {
- // Update systemId in parent stylesheet for error reporting
- context.setSystemId(getAttribute("href"));
-
- final ErrorMsg msg =
- new ErrorMsg(ErrorMsg.FILE_NOT_FOUND_ERR, docToLoad, this);
- parser.reportError(Constants.FATAL, msg);
}
catch (MalformedURLException e) {
// Update systemId in parent stylesheet for error reporting
1.9 +34 -3
xml-xalan/java/src/org/apache/xalan/xsltc/dom/SAXImpl.java
Index: SAXImpl.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/SAXImpl.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- SAXImpl.java 23 Jun 2003 15:58:18 -0000 1.8
+++ SAXImpl.java 6 Oct 2003 18:25:57 -0000 1.9
@@ -65,6 +65,8 @@
package org.apache.xalan.xsltc.dom;
+import java.net.URL;
+import java.net.MalformedURLException;
import java.util.Enumeration;
import javax.xml.transform.Source;
@@ -188,8 +190,37 @@
* Define the origin of the document from which the tree was built
*/
public void setDocumentURI(String uri) {
- setDocumentBaseURI(uri);
- _documentURI = uri;
+ URL documentURI = null;
+
+ if (uri != null && uri.length() > 0) {
+ try {
+ documentURI = new URL(uri);
+ }
+ catch (MalformedURLException e) {
+ String userDir = System.getProperty("user.dir");
+ String fileSep = System.getProperty("file.separator");
+
+ // Make it absolute if a relative path
+ if (!uri.startsWith(fileSep)) {
+ uri = userDir + fileSep + uri;
+ }
+ try {
+ documentURI = new URL("file", "", uri);
+ }
+ catch (MalformedURLException ep) {
+ try {
+ documentURI = new URL("file", "", userDir + fileSep);
+ }
+ catch (MalformedURLException epp) {
+ // ignore
+ }
+ }
+ }
+ }
+ if (documentURI != null) {
+ _documentURI = documentURI.toString();
+ setDocumentBaseURI(_documentURI);
+ }
}
/**
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]