You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@cocoon.apache.org by Mariano Kamp <mk...@codamax.com> on 2001/07/04 11:34:12 UTC

XSLT broken?

Hi, 

  I still have the problem, that the XSLT processor invoked from within 
cocoon behaves differently as opposed to be invoked from the command line. 
This happens only when a second namespace is involved. This is the case when 
using the SQLTransformer for example. The nodes are completly omitted when 
using the TRAX Transformer.

  I tried to find a hint in the code with not much of success. Although I 
found that it would work, when there is just one namespace, so I tried to 
patch the SQLTransformer in order to give it a parameter what the output 
namespace should be. Unfortunately even this workaround doesn't work. The 
namespace related to the SQLTransformer is still outputed which breaks the 
TRAX Transformer. 

  Here is what I tried:

   Index: src/org/apache/cocoon/transformation/SQLTransformer.java
===================================================================
RCS file: 
/home/cvspublic/xml-cocoon2/src/org/apache/cocoon/transformation/SQLTransformer.java,v
retrieving revision 1.11
diff -u -r1.11 SQLTransformer.java
--- src/org/apache/cocoon/transformation/SQLTransformer.java    2001/06/30 
02:38:30     1.11
+++ src/org/apache/cocoon/transformation/SQLTransformer.java    2001/07/04 
09:20:00
@@ -73,6 +73,7 @@
     public static final String MAGIC_NR_OF_ROWS = "show-nr-of-rows";
     public static final String MAGIC_QUERY = "query";
     public static final String MAGIC_VALUE = "value";
+    public static final String MAGIC_OUTPUT_NAMESPACE = "output-namespace";
     public static final String MAGIC_DOC_ELEMENT = "doc-element";
     public static final String MAGIC_ROW_ELEMENT = "row-element";
     public static final String MAGIC_IN_PARAMETER = "in-parameter";
@@ -129,6 +130,9 @@
     protected Parameters parameters;
     protected Map objectModel;
 
+    /** output namespace */
+    protected String outputNamespace;
+
     public void compose(ComponentManager manager) {
         try {
             this.manager = manager;
@@ -201,17 +205,27 @@
         }
         showNrOfRows = 
parameters.getParameter(SQLTransformer.MAGIC_NR_OF_ROWS,null);
 
-        // Check for row-element and doc-element
+        // Check for row-element, doc-element and the associated namespace 
         parameter = 
parameters.getParameter(SQLTransformer.MAGIC_DOC_ELEMENT, null);
         if (parameter != null) {
             getLogger().debug("DOC-ELEMENT: " + parameter);
           default_properties.setProperty(SQLTransformer.MAGIC_DOC_ELEMENT, 
parameter);
         }
+
         parameter = 
parameters.getParameter(SQLTransformer.MAGIC_ROW_ELEMENT, null);
         if (parameter != null) {
             getLogger().debug("ROW-ELEMENT: " + parameter);
             default_properties.setProperty(SQLTransformer.MAGIC_ROW_ELEMENT, 
parameter);
         }
+
+        parameter = 
parameters.getParameter(SQLTransformer.MAGIC_OUTPUT_NAMESPACE, null);
+        if (parameter != null) {
+            getLogger().debug("OUTPUT-NAMESPACE: " + parameter);
+            outputNamespace = parameter;
+        }
+       else {
+           outputNamespace = my_uri;
+       }
     }
     
     /** END SitemapComponent methods **/
@@ -223,6 +237,9 @@
      */
     protected void executeQuery(int index) throws SAXException {
 //        this.contentHandler.startPrefixMapping("",my_uri);
+        if (!outputNamespace.equals(my_uri)) {
+           this.contentHandler.startPrefixMapping("", outputNamespace);
+       }
         getLogger().debug("SQLTransformer executing query nr " + index);
         AttributesImpl attr = new AttributesImpl();
         Query query = (Query) queries.elementAt(index);
@@ -230,12 +247,12 @@
             query.execute();
 
             if (showNrOfRows!=null && showNrOfRows.equalsIgnoreCase("true")) 
 {
-              
attr.addAttribute(my_uri,query.nr_of_rows,query.nr_of_rows,"CDATA",
+              
attr.addAttribute(outputNamespace,query.nr_of_rows,query.nr_of_rows,"CDATA",
                                 String.valueOf(query.getNrOfRows()));
             }
             String name = query.getName();
             if (name !=null)  {
-              
attr.addAttribute(my_uri,query.name_attribute,query.name_attribute,"CDATA",
+              
attr.addAttribute(outputNamespace,query.name_attribute,query.name_attribute,"CDATA",
                                 name);
             }
             this.start(query.rowset_name, attr);
@@ -264,6 +281,8 @@
         }
         this.end(query.rowset_name);
 //        this.contentHandler.endPrefixMapping("");
+        if (!outputNamespace.equals(my_uri))
+         this.contentHandler.endPrefixMapping("");
     }
 
     protected static void throwIllegalStateException(String message) {
@@ -596,12 +615,12 @@
 
     private void start(String name,
                        AttributesImpl attr) throws SAXException {
-        super.contentHandler.startElement(my_uri, name, name, attr);
+        super.contentHandler.startElement(outputNamespace, name, name, attr);
         attr.clear();
     }
 
     private void end(String name) throws SAXException {
-        super.contentHandler.endElement(my_uri, name, name);
+        super.contentHandler.endElement(outputNamespace, name, name);
     }
 
     private void data(String data) throws SAXException {


Any clue, why it still outputs the namespace of the SQLTransformer? It 
doesn't output any element from the SQLTransformer, but the namespace?!

Any help is strongly appreciated.

Mariano

---------------------------------------------------------------------
To unsubscribe, e-mail: cocoon-dev-unsubscribe@xml.apache.org
For additional commands, email: cocoon-dev-help@xml.apache.org