You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by bl...@apache.org on 2001/10/18 19:23:46 UTC
cvs commit: xml-cocoon2/src/org/apache/cocoon/transformation XIncludeTransformer.java
bloritsch 01/10/18 10:23:46
Modified: src/org/apache/cocoon/transformation Tag: cocoon_20_branch
XIncludeTransformer.java
Log:
Convert XIncludeTransformer to use SourceResolver instead of URLFactory
Revision Changes Path
No revision
No revision
1.6.2.11 +44 -73 xml-cocoon2/src/org/apache/cocoon/transformation/XIncludeTransformer.java
Index: XIncludeTransformer.java
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/org/apache/cocoon/transformation/XIncludeTransformer.java,v
retrieving revision 1.6.2.10
retrieving revision 1.6.2.11
diff -u -r1.6.2.10 -r1.6.2.11
--- XIncludeTransformer.java 2001/10/11 08:56:15 1.6.2.10
+++ XIncludeTransformer.java 2001/10/18 17:23:46 1.6.2.11
@@ -13,11 +13,10 @@
import org.apache.avalon.framework.component.ComponentException;
import org.apache.avalon.framework.component.ComponentManager;
import org.apache.avalon.framework.component.Composable;
-import org.apache.avalon.framework.logger.Loggable;
import org.apache.avalon.framework.parameters.Parameters;
import org.apache.cocoon.ProcessingException;
import org.apache.cocoon.components.parser.Parser;
-import org.apache.cocoon.components.url.URLFactory;
+import org.apache.cocoon.environment.Source;
import org.apache.cocoon.environment.SourceResolver;
import org.apache.cocoon.xml.IncludeXMLConsumer;
import org.apache.cocoon.xml.dom.DOMStreamer;
@@ -32,7 +31,6 @@
import javax.xml.transform.TransformerException;
import java.io.*;
import java.net.MalformedURLException;
-import java.net.URL;
import java.util.Map;
import java.util.Stack;
@@ -44,11 +42,11 @@
* by the SAX event FSM yet.
*
* @author <a href="mailto:balld@webslingerZ.com">Donald Ball</a>
- * @version CVS $Revision: 1.6.2.10 $ $Date: 2001/10/11 08:56:15 $ $Author: cziegeler $
+ * @version CVS $Revision: 1.6.2.11 $ $Date: 2001/10/18 17:23:46 $ $Author: bloritsch $
*/
public class XIncludeTransformer extends AbstractTransformer implements Composable, Recyclable, Disposable {
- protected URLFactory urlFactory;
+ protected SourceResolver resolver;
protected ComponentManager manager = null;
@@ -60,10 +58,10 @@
public static final String XINCLUDE_INCLUDE_ELEMENT_HREF_ATTRIBUTE = "href";
public static final String XINCLUDE_INCLUDE_ELEMENT_PARSE_ATTRIBUTE = "parse";
- protected URL base_xmlbase_uri = null;
+ protected Source base_xmlbase_uri = null;
/** The current XMLBase URI. We start with an empty "dummy" URL. **/
- protected URL current_xmlbase_uri = null;
+ protected Source current_xmlbase_uri = null;
/** This is a stack of xml:base attributes which belong to our ancestors **/
protected Stack xmlbase_stack = new Stack();
@@ -80,15 +78,12 @@
public void setup(SourceResolver resolver, Map objectModel,
String source, Parameters parameters)
- throws ProcessingException, SAXException, IOException {}
+ throws ProcessingException, SAXException, IOException {
+ this.resolver = resolver;
+ }
public void compose(ComponentManager manager) {
this.manager = manager;
- try {
- this.urlFactory = (URLFactory)this.manager.lookup(URLFactory.ROLE);
- } catch (Exception e) {
- getLogger().error("cannot obtain URLFactory", e);
- }
}
public void startElement(String uri, String name, String raw, Attributes attr) throws SAXException {
@@ -96,7 +91,7 @@
if ((value = attr.getValue(XMLBASE_NAMESPACE_URI,XMLBASE_ATTRIBUTE)) != null) {
try {
startXMLBaseAttribute(uri,name,value);
- } catch (MalformedURLException e) {
+ } catch (ProcessingException e) {
getLogger().debug("XincludeTransformer", e);
throw new SAXException(e);
}
@@ -109,7 +104,7 @@
try {
processXIncludeElement(href, parse);
- } catch (MalformedURLException e) {
+ } catch (ProcessingException e) {
getLogger().debug("XincludeTransformer", e);
throw new SAXException(e);
} catch (IOException e) {
@@ -138,22 +133,22 @@
getLogger().debug("XIncludeTransformer: setDocumentLocator called " + locator.getSystemId());
}
- base_xmlbase_uri = urlFactory.getURL(locator.getSystemId());
+ base_xmlbase_uri = this.resolver.resolve(locator.getSystemId());
// If url ends with .xxx then truncate to dir
- if (base_xmlbase_uri.toExternalForm().lastIndexOf('.') > base_xmlbase_uri.toExternalForm().lastIndexOf('/')) {
- base_xmlbase_uri = new URL(base_xmlbase_uri.toExternalForm().substring(0,base_xmlbase_uri.toExternalForm().lastIndexOf('/')+1));
+ if (base_xmlbase_uri.getSystemId().lastIndexOf('.') > base_xmlbase_uri.getSystemId().lastIndexOf('/')) {
+ base_xmlbase_uri = this.resolver.resolve(base_xmlbase_uri.getSystemId().substring(0,base_xmlbase_uri.getSystemId().lastIndexOf('/')+1));
}
if (current_xmlbase_uri == null) {
current_xmlbase_uri = base_xmlbase_uri;
}
- } catch (MalformedURLException e) {getLogger().debug("XincludeTransformer", e);}
+ } catch (Exception e) {getLogger().debug("XincludeTransformer", e);}
super.setDocumentLocator(locator);
}
- protected void startXMLBaseAttribute(String uri, String name, String value) throws MalformedURLException {
+ protected void startXMLBaseAttribute(String uri, String name, String value) throws ProcessingException {
String urlLoc = value;
if (! urlLoc.endsWith("/")) {
@@ -167,13 +162,18 @@
if (current_xmlbase_uri != null) {
xmlbase_stack.push(current_xmlbase_uri);
}
- current_xmlbase_uri = urlFactory.getURL(urlLoc);
- xmlbase_element_uri_stack.push(last_xmlbase_element_uri);
- last_xmlbase_element_uri = uri;
-
- xmlbase_element_name_stack.push(last_xmlbase_element_name);
- last_xmlbase_element_name = name;
+ try {
+ current_xmlbase_uri = this.resolver.resolve(urlLoc);
+
+ xmlbase_element_uri_stack.push(last_xmlbase_element_uri);
+ last_xmlbase_element_uri = uri;
+
+ xmlbase_element_name_stack.push(last_xmlbase_element_name);
+ last_xmlbase_element_name = name;
+ } catch (Exception e) {
+ throw new ProcessingException("Could not resolve '" + urlLoc + "'", e);
+ }
}
protected void endXMLBaseAttribute() {
@@ -182,7 +182,7 @@
}
if (xmlbase_stack.size() > 0) {
- current_xmlbase_uri = (URL)xmlbase_stack.pop();
+ current_xmlbase_uri = (Source)xmlbase_stack.pop();
} else {
current_xmlbase_uri = base_xmlbase_uri;
}
@@ -190,52 +190,36 @@
last_xmlbase_element_name = (String)xmlbase_element_name_stack.pop();
}
- protected void processXIncludeElement(String href, String parse) throws SAXException,MalformedURLException,IOException {
+ protected void processXIncludeElement(String href, String parse) throws SAXException,ProcessingException,IOException {
if (getLogger().isDebugEnabled()) {
getLogger().debug("Processing XInclude element: href="+href+", parse="+parse);
- getLogger().debug("Base URI: " + current_xmlbase_uri.toExternalForm());
+ getLogger().debug("Base URI: " + current_xmlbase_uri.getSystemId());
}
- URL url;
+ Source url;
String suffix;
int index = href.indexOf('#');
if (index < 0) {
- url = urlFactory.getURL(current_xmlbase_uri,href);
+ url = this.resolver.resolve(current_xmlbase_uri.getSystemId() + href);
suffix = "";
} else {
- url = urlFactory.getURL(current_xmlbase_uri,href.substring(0,index));
+ url = this.resolver.resolve(current_xmlbase_uri.getSystemId() + href.substring(0,index));
suffix = href.substring(index+1);
}
if (getLogger().isDebugEnabled()) {
getLogger().debug("URL: "+url+"\nSuffix: "+suffix);
}
- Object object = url.getContent();
- getLogger().debug("Object: "+object);
+
if (parse.equals("text")) {
getLogger().debug("Parse type is text");
- if (object instanceof Loggable) {
- ((Loggable)object).setLogger(getLogger());
- }
- if (object instanceof Reader) {
- Reader reader = new BufferedReader((Reader)object);
- int read;
- char ary[] = new char[1024];
- if (reader != null) {
- while ((read = reader.read(ary)) != -1) {
- super.characters(ary,0,read);
- }
- reader.close();
- }
- } else if (object instanceof InputStream) {
- InputStream input = (InputStream)object;
- Reader reader = new BufferedReader(new InputStreamReader(input));
- int read;
- char ary[] = new char[1024];
- if (reader != null) {
- while ((read = reader.read(ary)) != -1) {
- super.characters(ary,0,read);
- }
- reader.close();
+ InputStream input = url.getInputStream();
+ Reader reader = new BufferedReader(new InputStreamReader(input));
+ int read;
+ char ary[] = new char[1024];
+ if (reader != null) {
+ while ((read = reader.read(ary)) != -1) {
+ super.characters(ary,0,read);
}
+ reader.close();
}
} else if (parse.equals("xml")) {
getLogger().debug("Parse type is XML");
@@ -245,19 +229,7 @@
getLogger().debug("Looking up " + Parser.ROLE);
parser = (Parser)manager.lookup(Parser.ROLE);
- InputSource input;
- if (object instanceof Loggable) {
- ((Loggable)object).setLogger(getLogger());
- }
- if (object instanceof Reader) {
- input = new InputSource(new BufferedReader((Reader)object));
- input.setSystemId(url.toString());
- } else if (object instanceof InputStream) {
- input = new InputSource(new BufferedInputStream((InputStream)object));
- input.setSystemId(url.toString());
- } else {
- throw new SAXException("Unknown object type: "+object);
- }
+ InputSource input = url.getInputSource();
if (suffix.startsWith("xpointer(") && suffix.endsWith(")")) {
String xpath = suffix.substring(9,suffix.length()-1);
getLogger().debug("XPath is "+xpath);
@@ -282,7 +254,7 @@
} catch(SAXException e) {
getLogger().error("Error in processXIncludeElement", e);
throw e;
- } catch(MalformedURLException e) {
+ } catch(ProcessingException e) {
getLogger().error("Error in processXIncludeElement", e);
throw e;
} catch(IOException e) {
@@ -300,6 +272,7 @@
public void recycle()
{
// Reset all variables to initial state.
+ this.resolver = null;
base_xmlbase_uri = null;
current_xmlbase_uri = null;
xmlbase_stack = new Stack();
@@ -312,7 +285,5 @@
public void dispose()
{
- if(this.urlFactory != null)
- this.manager.release((Component)this.urlFactory);
}
}
----------------------------------------------------------------------
In case of troubles, e-mail: webmaster@xml.apache.org
To unsubscribe, e-mail: cocoon-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: cocoon-cvs-help@xml.apache.org