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 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);
}
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 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);
> > }
> >
> >
> >
--
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 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);
> }
>
>
>