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/07/11 20:07:29 UTC

cvs commit: xml-cocoon2/src/org/apache/cocoon/transformation XIncludeTransformer.java

bloritsch    01/07/11 11:07:29

  Modified:    src/org/apache/cocoon/components/url URLFactoryImpl.java
               src/org/apache/cocoon/transformation
                        XIncludeTransformer.java
  Log:
  Fix XInclude Processor and update namespace to current standards.
  Note: fixed relative file URL error in URLFactory
  
  Revision  Changes    Path
  1.4       +7 -2      xml-cocoon2/src/org/apache/cocoon/components/url/URLFactoryImpl.java
  
  Index: URLFactoryImpl.java
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/org/apache/cocoon/components/url/URLFactoryImpl.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- URLFactoryImpl.java	2001/06/14 14:43:25	1.3
  +++ URLFactoryImpl.java	2001/07/11 18:07:17	1.4
  @@ -29,7 +29,7 @@
   
   /**
    * @author <a href="mailto:giacomo@apache.org">Giacomo Pati</a>
  - * @version $Id: URLFactoryImpl.java,v 1.3 2001/06/14 14:43:25 bloritsch Exp $
  + * @version $Id: URLFactoryImpl.java,v 1.4 2001/07/11 18:07:17 bloritsch Exp $
    */
   public class URLFactoryImpl extends AbstractLoggable implements URLFactory, Component, Configurable, Contextualizable {
   
  @@ -68,7 +68,7 @@
   
               org.apache.cocoon.environment.Context envContext = null;
               try {
  -                envContext = (org.apache.cocoon.environment.Context) 
  +                envContext = (org.apache.cocoon.environment.Context)
                                   context.get(Constants.CONTEXT_ENVIRONMENT_CONTEXT);
               } catch (ContextException e){
                   getLogger().error("Making URL - ContextException in getURL",e);
  @@ -93,6 +93,11 @@
   
       public URL getURL(URL base, String location) throws MalformedURLException {
           if ( base != null ) {
  +            if (base.getProtocol().equals("file")) {
  +                File temp = new File(base.getPath(), location);
  +                return getURL("file:" + temp.getAbsolutePath());
  +            }
  +
               return getURL(new URL(base, location).toExternalForm());
           } else {
               return getURL(location);
  
  
  
  1.11      +36 -13    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.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- XIncludeTransformer.java	2001/07/07 11:43:36	1.10
  +++ XIncludeTransformer.java	2001/07/11 18:07:24	1.11
  @@ -53,7 +53,7 @@
    * by the SAX event FSM yet.
    *
    * @author <a href="mailto:balld@webslingerZ.com">Donald Ball</a>
  - * @version CVS $Revision: 1.10 $ $Date: 2001/07/07 11:43:36 $ $Author: giacomo $
  + * @version CVS $Revision: 1.11 $ $Date: 2001/07/11 18:07:24 $ $Author: bloritsch $
    */
   public class XIncludeTransformer extends AbstractTransformer implements Composable, Recyclable, Disposable {
   
  @@ -64,7 +64,7 @@
       public static final String XMLBASE_NAMESPACE_URI = "http://www.w3.org/XML/1998/namespace";
       public static final String XMLBASE_ATTRIBUTE = "base";
   
  -    public static final String XINCLUDE_NAMESPACE_URI = "http://www.w3.org/1999/XML/xinclude";
  +    public static final String XINCLUDE_NAMESPACE_URI = "http://www.w3.org/2001/XInclude";
       public static final String XINCLUDE_INCLUDE_ELEMENT = "include";
       public static final String XINCLUDE_INCLUDE_ELEMENT_HREF_ATTRIBUTE = "href";
       public static final String XINCLUDE_INCLUDE_ELEMENT_PARSE_ATTRIBUTE = "parse";
  @@ -121,9 +121,12 @@
                   throw new SAXException(e);
               }
           }
  -        if (uri != null && name != null && uri.equals(XINCLUDE_NAMESPACE_URI) && name.equals(XINCLUDE_INCLUDE_ELEMENT)) {
  +        if (XINCLUDE_NAMESPACE_URI.equals(uri) && XINCLUDE_INCLUDE_ELEMENT.equals(name)) {
               String href = attr.getValue("",XINCLUDE_INCLUDE_ELEMENT_HREF_ATTRIBUTE);
               String parse = attr.getValue("",XINCLUDE_INCLUDE_ELEMENT_PARSE_ATTRIBUTE);
  +
  +            if (null == parse) parse="xml";
  +
               try {
                   processXIncludeElement(href, parse);
               } catch (MalformedURLException e) {
  @@ -151,24 +154,35 @@
       public void setDocumentLocator(Locator locator) {
           try {
               base_xmlbase_uri = urlFactory.getURL(locator.getSystemId());
  -            current_xmlbase_uri = base_xmlbase_uri;
  -            //if (current_xmlbase_uri == null) {
  -               current_xmlbase_uri = base_xmlbase_uri;
  -            //   }
   
               // If url ends with .xxx then truncate to dir
  -            if (current_xmlbase_uri.toExternalForm().lastIndexOf('.') > current_xmlbase_uri.toExternalForm().lastIndexOf('/'))
  -               current_xmlbase_uri = new URL(current_xmlbase_uri.toExternalForm().substring(0,current_xmlbase_uri.toExternalForm().lastIndexOf('/')+1));
  +            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 (current_xmlbase_uri == null) {
  +               current_xmlbase_uri = base_xmlbase_uri;
  +            }
   
           } catch (MalformedURLException e) {getLogger().debug("XincludeTransformer", e);}
           super.setDocumentLocator(locator);
       }
   
       protected void startXMLBaseAttribute(String uri, String name, String value) throws MalformedURLException {
  +        String urlLoc = value;
  +
  +        if (! urlLoc.endsWith("/")) {
  +            urlLoc += "/";
  +        }
  +
  +        if (getLogger().isDebugEnabled()) {
  +            getLogger().debug("XIncludeTransformer: XMLBase = " + urlLoc);
  +        }
  +
           if (current_xmlbase_uri != null) {
               xmlbase_stack.push(current_xmlbase_uri);
           }
  -        current_xmlbase_uri = urlFactory.getURL(value);
  +        current_xmlbase_uri = urlFactory.getURL(urlLoc);
   
           xmlbase_element_uri_stack.push(last_xmlbase_element_uri);
           last_xmlbase_element_uri = uri;
  @@ -178,6 +192,10 @@
       }
   
       protected void endXMLBaseAttribute() {
  +        if (getLogger().isDebugEnabled()) {
  +            getLogger().debug("XIncludeTransformer: XMLBase ended");
  +        }
  +
           if (xmlbase_stack.size() > 0) {
               current_xmlbase_uri = (URL)xmlbase_stack.pop();
           } else {
  @@ -188,18 +206,23 @@
       }
   
       protected void processXIncludeElement(String href, String parse) throws SAXException,MalformedURLException,IOException {
  -        getLogger().debug("Processing XInclude element: href="+href+", parse="+parse);
  +        if (getLogger().isDebugEnabled()) {
  +            getLogger().debug("Processing XInclude element: href="+href+", parse="+parse);
  +            getLogger().debug("Base URI: " + current_xmlbase_uri.toExternalForm());
  +        }
           URL url;
           String suffix;
           int index = href.indexOf('#');
           if (index < 0) {
  -            url = urlFactory.getURL(current_xmlbase_uri,"/"+href);
  +            url = urlFactory.getURL(current_xmlbase_uri,href);
               suffix = "";
           } else {
               url = urlFactory.getURL(current_xmlbase_uri,href.substring(0,index));
               suffix = href.substring(index+1);
  +        }
  +        if (getLogger().isDebugEnabled()) {
  +            getLogger().debug("URL: "+url+"\nSuffix: "+suffix);
           }
  -        getLogger().debug("URL: "+url+"\nSuffix: "+suffix);
           Object object = url.getContent();
           getLogger().debug("Object: "+object);
           if (parse.equals("text")) {
  
  
  

----------------------------------------------------------------------
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