You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@forrest.apache.org by Thorsten Scherler <th...@juntadeandalucia.es> on 2009/03/05 15:03:31 UTC

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/

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)