You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by di...@apache.org on 2001/05/04 13:02:34 UTC
cvs commit: xml-cocoon/src/org/apache/cocoon/sitemap ContentAggregator.java
dims 01/05/04 04:02:33
Modified: src/org/apache/cocoon/components/saxconnector Tag:
xml-cocoon2 XIncludeSAXConnector.java
src/org/apache/cocoon/serialization Tag: xml-cocoon2
AbstractTextSerializer.java
src/org/apache/cocoon/sitemap Tag: xml-cocoon2
ContentAggregator.java
Log:
Patch from Sylavin fixing namespace bugs.
Revision Changes Path
No revision
No revision
1.1.2.12 +1 -6 xml-cocoon/src/org/apache/cocoon/components/saxconnector/Attic/XIncludeSAXConnector.java
Index: XIncludeSAXConnector.java
===================================================================
RCS file: /home/cvs/xml-cocoon/src/org/apache/cocoon/components/saxconnector/Attic/XIncludeSAXConnector.java,v
retrieving revision 1.1.2.11
retrieving revision 1.1.2.12
diff -u -r1.1.2.11 -r1.1.2.12
--- XIncludeSAXConnector.java 2001/04/30 14:17:15 1.1.2.11
+++ XIncludeSAXConnector.java 2001/05/04 11:02:05 1.1.2.12
@@ -40,7 +40,7 @@
/**
* Copy of code from XIncludeTransformer as a starting point for XIncludeSAXConnector.
* @author <a href="dims@yahoo.com">Davanum Srinivas</a>
- * @version CVS $Revision: 1.1.2.11 $ $Date: 2001/04/30 14:17:15 $
+ * @version CVS $Revision: 1.1.2.12 $ $Date: 2001/05/04 11:02:05 $
*/
public class XIncludeSAXConnector extends AbstractXMLPipe implements Composable, Recyclable, SAXConnector, Disposable {
@@ -117,11 +117,6 @@
String qname = name;
if (!namespaceURI.equals("")) {
super.startPrefixMapping(prefix, namespaceURI);
- if (prefix!= null && !prefix.equals("")) {
- attrs.addAttribute("", prefix, "xmlns:" + prefix, "CDATA", namespaceURI);
- } else {
- attrs.addAttribute("", "xmlns", "xmlns", "CDATA", namespaceURI);
- }
}
super.startElement(namespaceURI, name, name, attrs);
}
No revision
No revision
1.1.2.15 +125 -1 xml-cocoon/src/org/apache/cocoon/serialization/Attic/AbstractTextSerializer.java
Index: AbstractTextSerializer.java
===================================================================
RCS file: /home/cvs/xml-cocoon/src/org/apache/cocoon/serialization/Attic/AbstractTextSerializer.java,v
retrieving revision 1.1.2.14
retrieving revision 1.1.2.15
diff -u -r1.1.2.14 -r1.1.2.15
--- AbstractTextSerializer.java 2001/04/30 14:17:37 1.1.2.14
+++ AbstractTextSerializer.java 2001/05/04 11:02:14 1.1.2.15
@@ -8,6 +8,8 @@
package org.apache.cocoon.serialization;
+import java.util.ArrayList;
+import java.util.List;
import java.util.Properties;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.TransformerFactory;
@@ -15,16 +17,21 @@
import org.apache.avalon.framework.configuration.Configurable;
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.ConfigurationException;
+import org.apache.cocoon.Constants;
import org.apache.cocoon.caching.CacheValidity;
import org.apache.cocoon.caching.Cacheable;
import org.apache.cocoon.caching.NOPCacheValidity;
import org.apache.cocoon.util.TraxErrorHandler;
+import org.xml.sax.Attributes;
+import org.xml.sax.helpers.AttributesImpl;
+import org.xml.sax.SAXException;
/**
* @author <a href="mailto:fumagalli@exoffice.com">Pierpaolo Fumagalli</a>
* (Apache Software Foundation, Exoffice Technologies)
* @author <a href="mailto:stefano@apache.org">Stefano Mazzocchi</a>
- * @version CVS $Revision: 1.1.2.14 $ $Date: 2001/04/30 14:17:37 $
+ * @author <a href="mailto:sylvain.wallez@anyware-tech.com">Sylvain Wallez</a>
+ * @version CVS $Revision: 1.1.2.15 $ $Date: 2001/05/04 11:02:14 $
*/
public abstract class AbstractTextSerializer extends AbstractSerializer implements Configurable, Cacheable {
@@ -37,6 +44,21 @@
* The <code>Properties</code> used by this serializer.
*/
protected Properties format = new Properties();
+
+ /**
+ * The prefixes of startPreficMapping() declarations for the coming element.
+ */
+ private List prefixList = new ArrayList();
+
+ /**
+ * The URIs of startPrefixMapping() declarations for the coming element.
+ */
+ private List uriList = new ArrayList();
+
+ /**
+ * True if there has been some startPrefixMapping() for the coming element.
+ */
+ private boolean hasMappings = false;
/**
* Helper for TransformerFactory.
@@ -127,6 +149,108 @@
* Recycle serializer by removing references
*/
public void recycle() {
+ clearMappings();
super.recycle();
+ }
+
+ /**
+ *
+ */
+ public void startDocument()
+ throws SAXException {
+ // Cleanup
+ clearMappings();
+ super.startDocument();
+ }
+
+ /**
+ * Add tracking of mappings to be able to add <code>xmlns:</code> attributes
+ * in <code>startElement()</code>.
+ */
+ public void startPrefixMapping(String prefix, String uri)
+ throws SAXException {
+ // Store the mappings to reconstitute xmlns:attributes
+ this.hasMappings = true;
+ this.prefixList.add(prefix);
+ this.uriList.add(uri);
+
+ super.startPrefixMapping(prefix, uri);
+ }
+
+ /**
+ * Ensure all namespace declarations are present as <code>xmlns:</code> attributes
+ * and add those needed before calling superclass. This is a workaround for a Xalan bug
+ * (at least in version 2.0.1) : <code>org.apache.xalan.serialize.SerializerToXML</code>
+ * ignores <code>start/endPrefixMapping()</code>.
+ */
+ public void startElement(String eltUri, String eltLocalName, String eltQName, Attributes attrs)
+ throws SAXException {
+
+ if (this.hasMappings) {
+ // Add xmlns* attributes where needed
+
+ // New Attributes if we have to add some.
+ AttributesImpl newAttrs = null;
+
+ int mappingCount = this.prefixList.size();
+ int attrCount = attrs.getLength();
+
+ for(int mapping = 0; mapping < mappingCount; mapping++) {
+
+ // Build infos for this namespace
+ String uri = (String)this.uriList.get(mapping);
+ String prefix = (String)this.prefixList.get(mapping);
+ String qName = prefix.equals("") ? "xmlns" : ("xmlns:" + prefix);
+
+ // Search for the corresponding xmlns* attribute
+ boolean found = false;
+ find : for (int attr = 0; attr < attrCount; attr++) {
+ if (qName.equals(attrs.getQName(attr))) {
+ // Check if mapping and attribute URI match
+ if (! uri.equals(attrs.getValue(attr))) {
+ getLogger().error("AbstractTextSerializer:URI in prefix mapping and attribute do not match : '" + uri + "' - '" + attrs.getURI(attr) + "'");
+ throw new SAXException("URI in prefix mapping and attribute do not match");
+ }
+ found = true;
+ break find;
+ }
+ }
+
+ if (!found) {
+ // Need to add this namespace
+ if (newAttrs == null) {
+ // Need to test if attrs is empty or we go into an infinite loop...
+ // Well know SAX bug which I spent 3 hours to remind of :-(
+ if (attrCount == 0)
+ newAttrs = new AttributesImpl();
+ else
+ newAttrs = new AttributesImpl(attrs);
+ }
+
+ if (prefix.equals("")) {
+ newAttrs.addAttribute(Constants.XML_NAMESPACE_URI, "xmlns", "xmlns", "CDATA", uri);
+ } else {
+ newAttrs.addAttribute(Constants.XML_NAMESPACE_URI, prefix, qName, "CDATA", uri);
+ }
+ }
+ } // end for mapping
+
+ // Cleanup for the next element
+ clearMappings();
+
+ // Start element with new attributes, if any
+ super.startElement(eltUri, eltLocalName, eltQName, newAttrs == null ? attrs : newAttrs);
+ }
+ else {
+ // Normal job
+ super.startElement(eltUri, eltLocalName, eltQName, attrs);
+ }
+ }
+
+ private void clearMappings()
+ {
+ this.hasMappings = false;
+ this.prefixList.clear();
+ this.uriList.clear();
}
}
No revision
No revision
1.1.2.11 +1 -6 xml-cocoon/src/org/apache/cocoon/sitemap/Attic/ContentAggregator.java
Index: ContentAggregator.java
===================================================================
RCS file: /home/cvs/xml-cocoon/src/org/apache/cocoon/sitemap/Attic/ContentAggregator.java,v
retrieving revision 1.1.2.10
retrieving revision 1.1.2.11
diff -u -r1.1.2.10 -r1.1.2.11
--- ContentAggregator.java 2001/04/30 14:17:42 1.1.2.10
+++ ContentAggregator.java 2001/05/04 11:02:25 1.1.2.11
@@ -38,7 +38,7 @@
/**
* @author <a href="mailto:giacomo@apache.org">Giacomo Pati</a>
- * @version CVS $Id: ContentAggregator.java,v 1.1.2.10 2001/04/30 14:17:42 bloritsch Exp $
+ * @version CVS $Id: ContentAggregator.java,v 1.1.2.11 2001/05/04 11:02:25 dims Exp $
*/
public class ContentAggregator extends ContentHandlerWrapper
@@ -333,11 +333,6 @@
String qname = name;
if (!namespaceURI.equals("")) {
this.documentHandler.startPrefixMapping(prefix, namespaceURI);
- if (!prefix.equals("")) {
- attrs.addAttribute("", prefix, "xmlns:" + prefix, "CDATA", namespaceURI);
- } else {
- attrs.addAttribute("", "xmlns", "xmlns", "CDATA", namespaceURI);
- }
}
this.documentHandler.startElement(namespaceURI, name, name, attrs);
}
----------------------------------------------------------------------
In case of troubles, e-mail: webmaster@xml.apache.org
To unsubscribe, e-mail: cocoon-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: cocoon-cvs-help@xml.apache.org