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, <thors...@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 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("<"); > } else if (c == '>') { > emit(">"); > - } 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); > } > > >