You are viewing a plain text version of this content. The canonical link for it is here.
Posted to svn@forrest.apache.org by th...@apache.org on 2009/03/05 12:20:30 UTC

svn commit: r750422 - in /forrest/branches/dispatcher_rewrite/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher: impl/helper/ transformation/

Author: thorsten
Date: Thu Mar  5 11:20:29 2009
New Revision: 750422

URL: http://svn.apache.org/viewvc?rev=750422&view=rev
Log:
Fixing bug regarding comments that not have been passed to the output stage because the StringXMLizable.toSAX does not invoke a lexicalHandler. Further removing all spaces and linebreaks since the have caused problems in combination with <xsl:attribute> resulting in &#10; in the output and extraspaces.

Modified:
    forrest/branches/dispatcher_rewrite/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/impl/helper/ContractHandler.java
    forrest/branches/dispatcher_rewrite/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/impl/helper/EchoHandler.java
    forrest/branches/dispatcher_rewrite/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/transformation/DispatcherTransformer.java

Modified: forrest/branches/dispatcher_rewrite/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/impl/helper/ContractHandler.java
URL: http://svn.apache.org/viewvc/forrest/branches/dispatcher_rewrite/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/impl/helper/ContractHandler.java?rev=750422&r1=750421&r2=750422&view=diff
==============================================================================
--- forrest/branches/dispatcher_rewrite/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/impl/helper/ContractHandler.java (original)
+++ forrest/branches/dispatcher_rewrite/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/impl/helper/ContractHandler.java Thu Mar  5 11:20:29 2009
@@ -67,7 +67,7 @@
 
     if (recording) {
       String prefix = extractPrefix(raw);
-      emit(lineEnd + "<" + raw);
+      emit( "<" + raw);
       if (uri != null && !uri.equals("")) {
         if (prefix != null) {
           if (!map.containsKey(prefix)) {

Modified: forrest/branches/dispatcher_rewrite/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/impl/helper/EchoHandler.java
URL: http://svn.apache.org/viewvc/forrest/branches/dispatcher_rewrite/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/impl/helper/EchoHandler.java?rev=750422&r1=750421&r2=750422&view=diff
==============================================================================
--- forrest/branches/dispatcher_rewrite/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/impl/helper/EchoHandler.java (original)
+++ forrest/branches/dispatcher_rewrite/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/impl/helper/EchoHandler.java Thu Mar  5 11:20:29 2009
@@ -39,8 +39,6 @@
 
   private byte[] bytes;
 
-  protected String lineEnd;
-
   /**
    * Establece la codificación que se empleará en el tratamiento de los datos.
    * Si se pasa <code>null</code> o una cadena vacia emplea "UTF-8" por defecto.
@@ -49,7 +47,6 @@
    *          La codificación a emplear.
    */
   public EchoHandler(String encoding) {
-    lineEnd = System.getProperty("line.separator");
     if (null != encoding & !" ".equals(encoding)) {
       this.encoding = encoding;
     } else {
@@ -64,7 +61,7 @@
    */
   public void startDocument() throws SAXException {
     xmlBuffer = new StringBuffer();
-    emit("<?xml version=\"1.0\" encoding=\"" + encoding + "\"?>" + lineEnd);
+    emit("<?xml version=\"1.0\" encoding=\"" + encoding + "\"?>" );
   }
 
   /*
@@ -178,7 +175,7 @@
    */
   public void endElement(String uri, String loc, String raw)
       throws SAXException {
-    emit("</" + raw + ">" + lineEnd);
+    emit("</" + raw + ">" );
   }
 
   /*
@@ -191,6 +188,7 @@
    * @see org.xml.sax.helpers.DefaultHandler#characters(char[], int, int)
    */
   public void characters(char ch[], int start, int length) throws SAXException {
+    boolean ignorSpace = true;
     for (int i = 0; i < length; i++) {
       char c = ch[start + i];
       if (c == '&') {
@@ -199,8 +197,15 @@
         emit("&lt;");
       } else if (c == '>') {
         emit("&gt;");
-      } else {
-        emit(c);
+      } else if(c!='\n'){
+        // this is a workaround to ignore whitespaces that are not needed.
+        if(c==' ' && !ignorSpace){
+          emit(c);
+          ignorSpace=false;
+        }else if (c!=' '){
+          emit(c);
+          ignorSpace=false;
+        }
       }
     }
   }

Modified: forrest/branches/dispatcher_rewrite/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/transformation/DispatcherTransformer.java
URL: http://svn.apache.org/viewvc/forrest/branches/dispatcher_rewrite/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/transformation/DispatcherTransformer.java?rev=750422&r1=750421&r2=750422&view=diff
==============================================================================
--- forrest/branches/dispatcher_rewrite/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/transformation/DispatcherTransformer.java (original)
+++ forrest/branches/dispatcher_rewrite/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/transformation/DispatcherTransformer.java Thu Mar  5 11:20:29 2009
@@ -21,6 +21,7 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.Serializable;
+import java.io.StringReader;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
@@ -51,17 +52,13 @@
 import org.apache.axiom.om.OMNode;
 import org.apache.axiom.om.impl.builder.StAXOMBuilder;
 import org.apache.cocoon.ProcessingException;
-import org.apache.cocoon.ResourceNotFoundException;
 import org.apache.cocoon.caching.CacheableProcessingComponent;
 import org.apache.cocoon.environment.SourceResolver;
 import org.apache.cocoon.transformation.AbstractSAXTransformer;
 import org.apache.cocoon.util.TraxErrorHandler;
-import org.apache.cocoon.xml.IncludeXMLConsumer;
 import org.apache.cocoon.xml.RedundantNamespacesFilter;
-import org.apache.cocoon.xml.StringXMLizable;
 import org.apache.cocoon.xml.XMLUtils;
 import org.apache.commons.io.output.ByteArrayOutputStream;
-import org.apache.commons.logging.Log;
 import org.apache.excalibur.source.Source;
 import org.apache.excalibur.source.SourceException;
 import org.apache.excalibur.source.SourceValidity;
@@ -75,7 +72,6 @@
 import org.apache.forrest.dispatcher.impl.CocoonResolver;
 import org.apache.forrest.dispatcher.impl.helper.AXIOMXPathCreate;
 import org.apache.forrest.dispatcher.impl.helper.Captions;
-import org.apache.forrest.dispatcher.impl.helper.LoggingErrorListener;
 import org.apache.forrest.dispatcher.impl.helper.StAX;
 import org.apache.forrest.dispatcher.impl.helper.StreamHelper;
 import org.apache.forrest.dispatcher.impl.helper.XMLProperties;
@@ -245,8 +241,8 @@
   private InputStream dataStream;
 
   private String prefixString;
-
-  private HashMap storedPrefixMap;
+  
+  private TransformerFactory tfactory = TransformerFactory.newInstance(); 
 
   /*
    * @see
@@ -275,7 +271,13 @@
     config.setShrink(shrink);
     // request all factories to be created at this point since it is better to
     // create them only once
-    setNewTransformerFactory();
+    try {
+      setNewTransformerFactory();
+    } catch (ProcessingException e) {
+      throw new ConfigurationException(e.getLocalizedMessage(),e);
+    } catch (TransformerFactoryConfigurationError e) {
+      throw new ConfigurationException(e.getLocalizedMessage(),e);
+    }
   }
 
   /**
@@ -284,8 +286,10 @@
    * 
    * @param config
    *          the configuration to use.
+   * @throws TransformerFactoryConfigurationError 
+   * @throws ProcessingException 
    */
-  public void setConfig(WritableDispatcherBean config) {
+  public void setConfig(WritableDispatcherBean config) throws ProcessingException, TransformerFactoryConfigurationError {
     this.config = config;
     if (config.getTransFact() == null) {
       setNewTransformerFactory();
@@ -297,11 +301,10 @@
    * Will prepare the factories that we need in further processing
    * 
    * @throws TransformerFactoryConfigurationError
+   * @throws ProcessingException 
    */
   private void setNewTransformerFactory()
-      throws TransformerFactoryConfigurationError {
-    // Is this the best way to get an instance in cocoon?
-    TransformerFactory tfactory = TransformerFactory.newInstance();
+      throws TransformerFactoryConfigurationError, ProcessingException {
     // set the uri resolver the same as this class
     tfactory.setURIResolver(this);
     // we want to set the error handler here to make sure it is intitialized
@@ -312,6 +315,14 @@
     this.factory = OMAbstractFactory.getOMFactory();
     // get the contract factory
     this.contractRep = new ContractFactory(config);
+    try {
+      parser = (SAXParser) manager.lookup(SAXParser.ROLE);
+    } catch (ServiceException e) {
+      String error = "dispatcherError:\n"
+        + "SAXParser could not be setup! Abort";
+      getLogger().error(error);
+      throw new ProcessingException(error);
+    }
   }
 
   /*
@@ -328,7 +339,6 @@
      */
     // setup our super class
     super.setup(resolver, objectModel, src, par);
-    storedPrefixMap = new HashMap();
 
     // get the id of this request
     this.requestId = parameters
@@ -480,11 +490,6 @@
     }
   }
 
-  public void ignorableWhitespace(char c[], int start, int len)
-  throws SAXException {
- // do nothing here!
-  }
-  
   
   public void characters(char c[], int start, int len)
   throws SAXException {
@@ -498,7 +503,7 @@
   }
   
   public void startDocument() throws SAXException {
- // Add the namespace filter to our own output.
+    // Add the namespace filter to our own output.
     RedundantNamespacesFilter nsPipe = new RedundantNamespacesFilter();
     if (this.xmlConsumer != null) {
         nsPipe.setConsumer(this.xmlConsumer);
@@ -506,24 +511,28 @@
         nsPipe.setContentHandler(this.contentHandler);
     }
     setConsumer(nsPipe);
-    super.startDocument();
   }
   
   public void endDocument()
   throws SAXException {
     structurerProcessingEnd();
-    super.endDocument();
   }
   
   /*
-   * copy 'n paste
+   * do nothing on the following methods, since we do not use them
    */
+  public void ignorableWhitespace(char c[], int start, int len)
+  throws SAXException {
+  }
   
   public void startCDATA() throws SAXException {
   }
 
   public void endCDATA() throws SAXException {
   }
+  
+  public void comment(char[] ary, int start, int length) throws SAXException {
+  }
 
   /**
    * Will execute the contract and process the result.
@@ -665,8 +674,10 @@
       }else{
         root.serialize(out);
       }
-      StringXMLizable xml = new StringXMLizable(out.toString());
-      xml.toSAX(new IncludeXMLConsumer(super.xmlConsumer));
+      
+      InputSource is = new InputSource(new StringReader(out.toString()));
+   // adding the result to the consumer       
+      parser.parse(is, super.xmlConsumer);
     } catch (Exception e) {
       throw new SAXException(e);
     }



Re: svn commit: r750422 - in /forrest/branches/dispatcher_rewrite/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher: impl/helper/ transformation/

Posted by Thorsten Scherler <th...@juntadeandalucia.es>.
On Thu, 2009-03-05 at 07:27 -0500, Tim Williams wrote:
> Hey Thorsten,
> Not specific to this commit, but I happened to notice a lot of code like:
> 
> if (uri != null && !uri.equals("")) {
> 
> Since we're already using Commons Lang anyway, you might find it
> easier to use StringUtils.isBlank(uri) in situations like this?

Yeah, good catch. Will try to remember it in the future.

salu2

> --tim
> 
> 
> 
> On Thu, Mar 5, 2009 at 6:20 AM,  <th...@apache.org> wrote:
> > Author: thorsten
> > Date: Thu Mar  5 11:20:29 2009
> > New Revision: 750422
> >
> > URL: http://svn.apache.org/viewvc?rev=750422&view=rev
> > Log:
> > Fixing bug regarding comments that not have been passed to the output stage because the StringXMLizable.toSAX does not invoke a lexicalHandler. Further removing all spaces and linebreaks since the have caused problems in combination with <xsl:attribute> resulting in &#10; in the output and extraspaces.
> >
> > Modified:
> >    forrest/branches/dispatcher_rewrite/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/impl/helper/ContractHandler.java
> >    forrest/branches/dispatcher_rewrite/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/impl/helper/EchoHandler.java
> >    forrest/branches/dispatcher_rewrite/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/transformation/DispatcherTransformer.java
> >
> > Modified: forrest/branches/dispatcher_rewrite/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/impl/helper/ContractHandler.java
> > URL: http://svn.apache.org/viewvc/forrest/branches/dispatcher_rewrite/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/impl/helper/ContractHandler.java?rev=750422&r1=750421&r2=750422&view=diff
> > ==============================================================================
> > --- forrest/branches/dispatcher_rewrite/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/impl/helper/ContractHandler.java (original)
> > +++ forrest/branches/dispatcher_rewrite/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/impl/helper/ContractHandler.java Thu Mar  5 11:20:29 2009
> > @@ -67,7 +67,7 @@
> >
> >     if (recording) {
> >       String prefix = extractPrefix(raw);
> > -      emit(lineEnd + "<" + raw);
> > +      emit( "<" + raw);
> >       if (uri != null && !uri.equals("")) {
> >         if (prefix != null) {
> >           if (!map.containsKey(prefix)) {
> >
> > Modified: forrest/branches/dispatcher_rewrite/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/impl/helper/EchoHandler.java
> > URL: http://svn.apache.org/viewvc/forrest/branches/dispatcher_rewrite/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/impl/helper/EchoHandler.java?rev=750422&r1=750421&r2=750422&view=diff
> > ==============================================================================
> > --- forrest/branches/dispatcher_rewrite/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/impl/helper/EchoHandler.java (original)
> > +++ forrest/branches/dispatcher_rewrite/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/impl/helper/EchoHandler.java Thu Mar  5 11:20:29 2009
> > @@ -39,8 +39,6 @@
> >
> >   private byte[] bytes;
> >
> > -  protected String lineEnd;
> > -
> >   /**
> >    * Establece la codificación que se empleará en el tratamiento de los datos.
> >    * Si se pasa <code>null</code> o una cadena vacia emplea "UTF-8" por defecto.
> > @@ -49,7 +47,6 @@
> >    *          La codificación a emplear.
> >    */
> >   public EchoHandler(String encoding) {
> > -    lineEnd = System.getProperty("line.separator");
> >     if (null != encoding & !" ".equals(encoding)) {
> >       this.encoding = encoding;
> >     } else {
> > @@ -64,7 +61,7 @@
> >    */
> >   public void startDocument() throws SAXException {
> >     xmlBuffer = new StringBuffer();
> > -    emit("<?xml version=\"1.0\" encoding=\"" + encoding + "\"?>" + lineEnd);
> > +    emit("<?xml version=\"1.0\" encoding=\"" + encoding + "\"?>" );
> >   }
> >
> >   /*
> > @@ -178,7 +175,7 @@
> >    */
> >   public void endElement(String uri, String loc, String raw)
> >       throws SAXException {
> > -    emit("</" + raw + ">" + lineEnd);
> > +    emit("</" + raw + ">" );
> >   }
> >
> >   /*
> > @@ -191,6 +188,7 @@
> >    * @see org.xml.sax.helpers.DefaultHandler#characters(char[], int, int)
> >    */
> >   public void characters(char ch[], int start, int length) throws SAXException {
> > +    boolean ignorSpace = true;
> >     for (int i = 0; i < length; i++) {
> >       char c = ch[start + i];
> >       if (c == '&') {
> > @@ -199,8 +197,15 @@
> >         emit("&lt;");
> >       } else if (c == '>') {
> >         emit("&gt;");
> > -      } else {
> > -        emit(c);
> > +      } else if(c!='\n'){
> > +        // this is a workaround to ignore whitespaces that are not needed.
> > +        if(c==' ' && !ignorSpace){
> > +          emit(c);
> > +          ignorSpace=false;
> > +        }else if (c!=' '){
> > +          emit(c);
> > +          ignorSpace=false;
> > +        }
> >       }
> >     }
> >   }
> >
> > Modified: forrest/branches/dispatcher_rewrite/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/transformation/DispatcherTransformer.java
> > URL: http://svn.apache.org/viewvc/forrest/branches/dispatcher_rewrite/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/transformation/DispatcherTransformer.java?rev=750422&r1=750421&r2=750422&view=diff
> > ==============================================================================
> > --- forrest/branches/dispatcher_rewrite/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/transformation/DispatcherTransformer.java (original)
> > +++ forrest/branches/dispatcher_rewrite/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/transformation/DispatcherTransformer.java Thu Mar  5 11:20:29 2009
> > @@ -21,6 +21,7 @@
> >  import java.io.IOException;
> >  import java.io.InputStream;
> >  import java.io.Serializable;
> > +import java.io.StringReader;
> >  import java.util.HashMap;
> >  import java.util.HashSet;
> >  import java.util.Iterator;
> > @@ -51,17 +52,13 @@
> >  import org.apache.axiom.om.OMNode;
> >  import org.apache.axiom.om.impl.builder.StAXOMBuilder;
> >  import org.apache.cocoon.ProcessingException;
> > -import org.apache.cocoon.ResourceNotFoundException;
> >  import org.apache.cocoon.caching.CacheableProcessingComponent;
> >  import org.apache.cocoon.environment.SourceResolver;
> >  import org.apache.cocoon.transformation.AbstractSAXTransformer;
> >  import org.apache.cocoon.util.TraxErrorHandler;
> > -import org.apache.cocoon.xml.IncludeXMLConsumer;
> >  import org.apache.cocoon.xml.RedundantNamespacesFilter;
> > -import org.apache.cocoon.xml.StringXMLizable;
> >  import org.apache.cocoon.xml.XMLUtils;
> >  import org.apache.commons.io.output.ByteArrayOutputStream;
> > -import org.apache.commons.logging.Log;
> >  import org.apache.excalibur.source.Source;
> >  import org.apache.excalibur.source.SourceException;
> >  import org.apache.excalibur.source.SourceValidity;
> > @@ -75,7 +72,6 @@
> >  import org.apache.forrest.dispatcher.impl.CocoonResolver;
> >  import org.apache.forrest.dispatcher.impl.helper.AXIOMXPathCreate;
> >  import org.apache.forrest.dispatcher.impl.helper.Captions;
> > -import org.apache.forrest.dispatcher.impl.helper.LoggingErrorListener;
> >  import org.apache.forrest.dispatcher.impl.helper.StAX;
> >  import org.apache.forrest.dispatcher.impl.helper.StreamHelper;
> >  import org.apache.forrest.dispatcher.impl.helper.XMLProperties;
> > @@ -245,8 +241,8 @@
> >   private InputStream dataStream;
> >
> >   private String prefixString;
> > -
> > -  private HashMap storedPrefixMap;
> > +
> > +  private TransformerFactory tfactory = TransformerFactory.newInstance();
> >
> >   /*
> >    * @see
> > @@ -275,7 +271,13 @@
> >     config.setShrink(shrink);
> >     // request all factories to be created at this point since it is better to
> >     // create them only once
> > -    setNewTransformerFactory();
> > +    try {
> > +      setNewTransformerFactory();
> > +    } catch (ProcessingException e) {
> > +      throw new ConfigurationException(e.getLocalizedMessage(),e);
> > +    } catch (TransformerFactoryConfigurationError e) {
> > +      throw new ConfigurationException(e.getLocalizedMessage(),e);
> > +    }
> >   }
> >
> >   /**
> > @@ -284,8 +286,10 @@
> >    *
> >    * @param config
> >    *          the configuration to use.
> > +   * @throws TransformerFactoryConfigurationError
> > +   * @throws ProcessingException
> >    */
> > -  public void setConfig(WritableDispatcherBean config) {
> > +  public void setConfig(WritableDispatcherBean config) throws ProcessingException, TransformerFactoryConfigurationError {
> >     this.config = config;
> >     if (config.getTransFact() == null) {
> >       setNewTransformerFactory();
> > @@ -297,11 +301,10 @@
> >    * Will prepare the factories that we need in further processing
> >    *
> >    * @throws TransformerFactoryConfigurationError
> > +   * @throws ProcessingException
> >    */
> >   private void setNewTransformerFactory()
> > -      throws TransformerFactoryConfigurationError {
> > -    // Is this the best way to get an instance in cocoon?
> > -    TransformerFactory tfactory = TransformerFactory.newInstance();
> > +      throws TransformerFactoryConfigurationError, ProcessingException {
> >     // set the uri resolver the same as this class
> >     tfactory.setURIResolver(this);
> >     // we want to set the error handler here to make sure it is intitialized
> > @@ -312,6 +315,14 @@
> >     this.factory = OMAbstractFactory.getOMFactory();
> >     // get the contract factory
> >     this.contractRep = new ContractFactory(config);
> > +    try {
> > +      parser = (SAXParser) manager.lookup(SAXParser.ROLE);
> > +    } catch (ServiceException e) {
> > +      String error = "dispatcherError:\n"
> > +        + "SAXParser could not be setup! Abort";
> > +      getLogger().error(error);
> > +      throw new ProcessingException(error);
> > +    }
> >   }
> >
> >   /*
> > @@ -328,7 +339,6 @@
> >      */
> >     // setup our super class
> >     super.setup(resolver, objectModel, src, par);
> > -    storedPrefixMap = new HashMap();
> >
> >     // get the id of this request
> >     this.requestId = parameters
> > @@ -480,11 +490,6 @@
> >     }
> >   }
> >
> > -  public void ignorableWhitespace(char c[], int start, int len)
> > -  throws SAXException {
> > - // do nothing here!
> > -  }
> > -
> >
> >   public void characters(char c[], int start, int len)
> >   throws SAXException {
> > @@ -498,7 +503,7 @@
> >   }
> >
> >   public void startDocument() throws SAXException {
> > - // Add the namespace filter to our own output.
> > +    // Add the namespace filter to our own output.
> >     RedundantNamespacesFilter nsPipe = new RedundantNamespacesFilter();
> >     if (this.xmlConsumer != null) {
> >         nsPipe.setConsumer(this.xmlConsumer);
> > @@ -506,24 +511,28 @@
> >         nsPipe.setContentHandler(this.contentHandler);
> >     }
> >     setConsumer(nsPipe);
> > -    super.startDocument();
> >   }
> >
> >   public void endDocument()
> >   throws SAXException {
> >     structurerProcessingEnd();
> > -    super.endDocument();
> >   }
> >
> >   /*
> > -   * copy 'n paste
> > +   * do nothing on the following methods, since we do not use them
> >    */
> > +  public void ignorableWhitespace(char c[], int start, int len)
> > +  throws SAXException {
> > +  }
> >
> >   public void startCDATA() throws SAXException {
> >   }
> >
> >   public void endCDATA() throws SAXException {
> >   }
> > +
> > +  public void comment(char[] ary, int start, int length) throws SAXException {
> > +  }
> >
> >   /**
> >    * Will execute the contract and process the result.
> > @@ -665,8 +674,10 @@
> >       }else{
> >         root.serialize(out);
> >       }
> > -      StringXMLizable xml = new StringXMLizable(out.toString());
> > -      xml.toSAX(new IncludeXMLConsumer(super.xmlConsumer));
> > +
> > +      InputSource is = new InputSource(new StringReader(out.toString()));
> > +   // adding the result to the consumer
> > +      parser.parse(is, super.xmlConsumer);
> >     } catch (Exception e) {
> >       throw new SAXException(e);
> >     }
> >
> >
> >
-- 
Thorsten Scherler <thorsten.at.apache.org>
Open Source Java <consulting, training and solutions>

Sociedad Andaluza para el Desarrollo de la Sociedad 
de la Información, S.A.U. (SADESI)





Re: svn commit: r750422 - in /forrest/branches/dispatcher_rewrite/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher: impl/helper/ transformation/

Posted by Tim Williams <wi...@gmail.com>.
Hey Thorsten,
Not specific to this commit, but I happened to notice a lot of code like:

if (uri != null && !uri.equals("")) {

Since we're already using Commons Lang anyway, you might find it
easier to use StringUtils.isBlank(uri) in situations like this?

--tim



On Thu, Mar 5, 2009 at 6:20 AM,  <th...@apache.org> wrote:
> Author: thorsten
> Date: Thu Mar  5 11:20:29 2009
> New Revision: 750422
>
> URL: http://svn.apache.org/viewvc?rev=750422&view=rev
> Log:
> Fixing bug regarding comments that not have been passed to the output stage because the StringXMLizable.toSAX does not invoke a lexicalHandler. Further removing all spaces and linebreaks since the have caused problems in combination with <xsl:attribute> resulting in &#10; in the output and extraspaces.
>
> Modified:
>    forrest/branches/dispatcher_rewrite/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/impl/helper/ContractHandler.java
>    forrest/branches/dispatcher_rewrite/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/impl/helper/EchoHandler.java
>    forrest/branches/dispatcher_rewrite/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/transformation/DispatcherTransformer.java
>
> Modified: forrest/branches/dispatcher_rewrite/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/impl/helper/ContractHandler.java
> URL: http://svn.apache.org/viewvc/forrest/branches/dispatcher_rewrite/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/impl/helper/ContractHandler.java?rev=750422&r1=750421&r2=750422&view=diff
> ==============================================================================
> --- forrest/branches/dispatcher_rewrite/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/impl/helper/ContractHandler.java (original)
> +++ forrest/branches/dispatcher_rewrite/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/impl/helper/ContractHandler.java Thu Mar  5 11:20:29 2009
> @@ -67,7 +67,7 @@
>
>     if (recording) {
>       String prefix = extractPrefix(raw);
> -      emit(lineEnd + "<" + raw);
> +      emit( "<" + raw);
>       if (uri != null && !uri.equals("")) {
>         if (prefix != null) {
>           if (!map.containsKey(prefix)) {
>
> Modified: forrest/branches/dispatcher_rewrite/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/impl/helper/EchoHandler.java
> URL: http://svn.apache.org/viewvc/forrest/branches/dispatcher_rewrite/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/impl/helper/EchoHandler.java?rev=750422&r1=750421&r2=750422&view=diff
> ==============================================================================
> --- forrest/branches/dispatcher_rewrite/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/impl/helper/EchoHandler.java (original)
> +++ forrest/branches/dispatcher_rewrite/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/impl/helper/EchoHandler.java Thu Mar  5 11:20:29 2009
> @@ -39,8 +39,6 @@
>
>   private byte[] bytes;
>
> -  protected String lineEnd;
> -
>   /**
>    * Establece la codificación que se empleará en el tratamiento de los datos.
>    * Si se pasa <code>null</code> o una cadena vacia emplea "UTF-8" por defecto.
> @@ -49,7 +47,6 @@
>    *          La codificación a emplear.
>    */
>   public EchoHandler(String encoding) {
> -    lineEnd = System.getProperty("line.separator");
>     if (null != encoding & !" ".equals(encoding)) {
>       this.encoding = encoding;
>     } else {
> @@ -64,7 +61,7 @@
>    */
>   public void startDocument() throws SAXException {
>     xmlBuffer = new StringBuffer();
> -    emit("<?xml version=\"1.0\" encoding=\"" + encoding + "\"?>" + lineEnd);
> +    emit("<?xml version=\"1.0\" encoding=\"" + encoding + "\"?>" );
>   }
>
>   /*
> @@ -178,7 +175,7 @@
>    */
>   public void endElement(String uri, String loc, String raw)
>       throws SAXException {
> -    emit("</" + raw + ">" + lineEnd);
> +    emit("</" + raw + ">" );
>   }
>
>   /*
> @@ -191,6 +188,7 @@
>    * @see org.xml.sax.helpers.DefaultHandler#characters(char[], int, int)
>    */
>   public void characters(char ch[], int start, int length) throws SAXException {
> +    boolean ignorSpace = true;
>     for (int i = 0; i < length; i++) {
>       char c = ch[start + i];
>       if (c == '&') {
> @@ -199,8 +197,15 @@
>         emit("&lt;");
>       } else if (c == '>') {
>         emit("&gt;");
> -      } else {
> -        emit(c);
> +      } else if(c!='\n'){
> +        // this is a workaround to ignore whitespaces that are not needed.
> +        if(c==' ' && !ignorSpace){
> +          emit(c);
> +          ignorSpace=false;
> +        }else if (c!=' '){
> +          emit(c);
> +          ignorSpace=false;
> +        }
>       }
>     }
>   }
>
> Modified: forrest/branches/dispatcher_rewrite/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/transformation/DispatcherTransformer.java
> URL: http://svn.apache.org/viewvc/forrest/branches/dispatcher_rewrite/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/transformation/DispatcherTransformer.java?rev=750422&r1=750421&r2=750422&view=diff
> ==============================================================================
> --- forrest/branches/dispatcher_rewrite/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/transformation/DispatcherTransformer.java (original)
> +++ forrest/branches/dispatcher_rewrite/plugins/org.apache.forrest.plugin.internal.dispatcher/src/java/org/apache/forrest/dispatcher/transformation/DispatcherTransformer.java Thu Mar  5 11:20:29 2009
> @@ -21,6 +21,7 @@
>  import java.io.IOException;
>  import java.io.InputStream;
>  import java.io.Serializable;
> +import java.io.StringReader;
>  import java.util.HashMap;
>  import java.util.HashSet;
>  import java.util.Iterator;
> @@ -51,17 +52,13 @@
>  import org.apache.axiom.om.OMNode;
>  import org.apache.axiom.om.impl.builder.StAXOMBuilder;
>  import org.apache.cocoon.ProcessingException;
> -import org.apache.cocoon.ResourceNotFoundException;
>  import org.apache.cocoon.caching.CacheableProcessingComponent;
>  import org.apache.cocoon.environment.SourceResolver;
>  import org.apache.cocoon.transformation.AbstractSAXTransformer;
>  import org.apache.cocoon.util.TraxErrorHandler;
> -import org.apache.cocoon.xml.IncludeXMLConsumer;
>  import org.apache.cocoon.xml.RedundantNamespacesFilter;
> -import org.apache.cocoon.xml.StringXMLizable;
>  import org.apache.cocoon.xml.XMLUtils;
>  import org.apache.commons.io.output.ByteArrayOutputStream;
> -import org.apache.commons.logging.Log;
>  import org.apache.excalibur.source.Source;
>  import org.apache.excalibur.source.SourceException;
>  import org.apache.excalibur.source.SourceValidity;
> @@ -75,7 +72,6 @@
>  import org.apache.forrest.dispatcher.impl.CocoonResolver;
>  import org.apache.forrest.dispatcher.impl.helper.AXIOMXPathCreate;
>  import org.apache.forrest.dispatcher.impl.helper.Captions;
> -import org.apache.forrest.dispatcher.impl.helper.LoggingErrorListener;
>  import org.apache.forrest.dispatcher.impl.helper.StAX;
>  import org.apache.forrest.dispatcher.impl.helper.StreamHelper;
>  import org.apache.forrest.dispatcher.impl.helper.XMLProperties;
> @@ -245,8 +241,8 @@
>   private InputStream dataStream;
>
>   private String prefixString;
> -
> -  private HashMap storedPrefixMap;
> +
> +  private TransformerFactory tfactory = TransformerFactory.newInstance();
>
>   /*
>    * @see
> @@ -275,7 +271,13 @@
>     config.setShrink(shrink);
>     // request all factories to be created at this point since it is better to
>     // create them only once
> -    setNewTransformerFactory();
> +    try {
> +      setNewTransformerFactory();
> +    } catch (ProcessingException e) {
> +      throw new ConfigurationException(e.getLocalizedMessage(),e);
> +    } catch (TransformerFactoryConfigurationError e) {
> +      throw new ConfigurationException(e.getLocalizedMessage(),e);
> +    }
>   }
>
>   /**
> @@ -284,8 +286,10 @@
>    *
>    * @param config
>    *          the configuration to use.
> +   * @throws TransformerFactoryConfigurationError
> +   * @throws ProcessingException
>    */
> -  public void setConfig(WritableDispatcherBean config) {
> +  public void setConfig(WritableDispatcherBean config) throws ProcessingException, TransformerFactoryConfigurationError {
>     this.config = config;
>     if (config.getTransFact() == null) {
>       setNewTransformerFactory();
> @@ -297,11 +301,10 @@
>    * Will prepare the factories that we need in further processing
>    *
>    * @throws TransformerFactoryConfigurationError
> +   * @throws ProcessingException
>    */
>   private void setNewTransformerFactory()
> -      throws TransformerFactoryConfigurationError {
> -    // Is this the best way to get an instance in cocoon?
> -    TransformerFactory tfactory = TransformerFactory.newInstance();
> +      throws TransformerFactoryConfigurationError, ProcessingException {
>     // set the uri resolver the same as this class
>     tfactory.setURIResolver(this);
>     // we want to set the error handler here to make sure it is intitialized
> @@ -312,6 +315,14 @@
>     this.factory = OMAbstractFactory.getOMFactory();
>     // get the contract factory
>     this.contractRep = new ContractFactory(config);
> +    try {
> +      parser = (SAXParser) manager.lookup(SAXParser.ROLE);
> +    } catch (ServiceException e) {
> +      String error = "dispatcherError:\n"
> +        + "SAXParser could not be setup! Abort";
> +      getLogger().error(error);
> +      throw new ProcessingException(error);
> +    }
>   }
>
>   /*
> @@ -328,7 +339,6 @@
>      */
>     // setup our super class
>     super.setup(resolver, objectModel, src, par);
> -    storedPrefixMap = new HashMap();
>
>     // get the id of this request
>     this.requestId = parameters
> @@ -480,11 +490,6 @@
>     }
>   }
>
> -  public void ignorableWhitespace(char c[], int start, int len)
> -  throws SAXException {
> - // do nothing here!
> -  }
> -
>
>   public void characters(char c[], int start, int len)
>   throws SAXException {
> @@ -498,7 +503,7 @@
>   }
>
>   public void startDocument() throws SAXException {
> - // Add the namespace filter to our own output.
> +    // Add the namespace filter to our own output.
>     RedundantNamespacesFilter nsPipe = new RedundantNamespacesFilter();
>     if (this.xmlConsumer != null) {
>         nsPipe.setConsumer(this.xmlConsumer);
> @@ -506,24 +511,28 @@
>         nsPipe.setContentHandler(this.contentHandler);
>     }
>     setConsumer(nsPipe);
> -    super.startDocument();
>   }
>
>   public void endDocument()
>   throws SAXException {
>     structurerProcessingEnd();
> -    super.endDocument();
>   }
>
>   /*
> -   * copy 'n paste
> +   * do nothing on the following methods, since we do not use them
>    */
> +  public void ignorableWhitespace(char c[], int start, int len)
> +  throws SAXException {
> +  }
>
>   public void startCDATA() throws SAXException {
>   }
>
>   public void endCDATA() throws SAXException {
>   }
> +
> +  public void comment(char[] ary, int start, int length) throws SAXException {
> +  }
>
>   /**
>    * Will execute the contract and process the result.
> @@ -665,8 +674,10 @@
>       }else{
>         root.serialize(out);
>       }
> -      StringXMLizable xml = new StringXMLizable(out.toString());
> -      xml.toSAX(new IncludeXMLConsumer(super.xmlConsumer));
> +
> +      InputSource is = new InputSource(new StringReader(out.toString()));
> +   // adding the result to the consumer
> +      parser.parse(is, super.xmlConsumer);
>     } catch (Exception e) {
>       throw new SAXException(e);
>     }
>
>
>