You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by si...@apache.org on 2011/02/06 18:28:47 UTC

svn commit: r1067706 - in /cocoon/cocoon3/trunk: cocoon-sample/src/main/resources/COB-INF/ cocoon-sax/src/main/java/org/apache/cocoon/sax/component/ cocoon-sitemap/src/main/resources/META-INF/cocoon/spring/

Author: simonetripodi
Date: Sun Feb  6 17:28:47 2011
New Revision: 1067706

URL: http://svn.apache.org/viewvc?rev=1067706&view=rev
Log:
COCOON3-60 The org.apache.cocoon.sax.component.LogAsXMLTransformer has to be integrated in the sitemap - patch provided by Francesco Chicchiriccò

Modified:
    cocoon/cocoon3/trunk/cocoon-sample/src/main/resources/COB-INF/sitemap.xmap
    cocoon/cocoon3/trunk/cocoon-sax/src/main/java/org/apache/cocoon/sax/component/LogAsXMLTransformer.java
    cocoon/cocoon3/trunk/cocoon-sitemap/src/main/resources/META-INF/cocoon/spring/cocoon-pipeline-component.xml

Modified: cocoon/cocoon3/trunk/cocoon-sample/src/main/resources/COB-INF/sitemap.xmap
URL: http://svn.apache.org/viewvc/cocoon/cocoon3/trunk/cocoon-sample/src/main/resources/COB-INF/sitemap.xmap?rev=1067706&r1=1067705&r2=1067706&view=diff
==============================================================================
--- cocoon/cocoon3/trunk/cocoon-sample/src/main/resources/COB-INF/sitemap.xmap (original)
+++ cocoon/cocoon3/trunk/cocoon-sample/src/main/resources/COB-INF/sitemap.xmap Sun Feb  6 17:28:47 2011
@@ -45,6 +45,9 @@
         <map:transform src="sax-pipeline/simple.xslt">
           <map:parameter name="myParam" value="1" />
         </map:transform>
+        <map:transform type="logasxml">
+          <map:parameter name="logfile" value="logasxml.log" />
+        </map:transform>
         <map:serialize />
       </map:match>
       <map:match equals="sax-pipeline/simple-1">

Modified: cocoon/cocoon3/trunk/cocoon-sax/src/main/java/org/apache/cocoon/sax/component/LogAsXMLTransformer.java
URL: http://svn.apache.org/viewvc/cocoon/cocoon3/trunk/cocoon-sax/src/main/java/org/apache/cocoon/sax/component/LogAsXMLTransformer.java?rev=1067706&r1=1067705&r2=1067706&view=diff
==============================================================================
--- cocoon/cocoon3/trunk/cocoon-sax/src/main/java/org/apache/cocoon/sax/component/LogAsXMLTransformer.java (original)
+++ cocoon/cocoon3/trunk/cocoon-sax/src/main/java/org/apache/cocoon/sax/component/LogAsXMLTransformer.java Sun Feb  6 17:28:47 2011
@@ -21,75 +21,100 @@ package org.apache.cocoon.sax.component;
 import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
+import java.io.IOException;
 import java.io.OutputStream;
 import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.cocoon.pipeline.SetupException;
 import org.apache.cocoon.sax.AbstractSAXTransformer;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 import org.xml.sax.Attributes;
 import org.xml.sax.Locator;
 import org.xml.sax.SAXException;
 
 /**
- * 
- * This class is not thread-safety!
+ * Transformer that can be plugged into a pipeline to print as XML the SAX
+ * events which passes through this transformer in a readable form to a file
+ * or sysout.
+ *
+ * This class is not thread-safe!
  */
 public final class LogAsXMLTransformer extends AbstractSAXTransformer {
 
     private static final String LOG_FILE = "logfile";
 
+    /**
+     * This class log.
+     */
+    private static final Log LOG = LogFactory.getLog(LogAsXMLTransformer.class);
+
     private final XMLSerializer xmlSerializer = XMLSerializer.createXMLSerializer();
+    
+    private OutputStream outputStream;
 
     public LogAsXMLTransformer() {
-        this.init(System.out);
+        this(null);
     }
 
     public LogAsXMLTransformer(File logFile) {
         if (logFile == null) {
-            throw new IllegalArgumentException("Argument 'logFile' must not be null");
-        }
-
-        try {
-            this.init(new FileOutputStream(logFile));
-        } catch (FileNotFoundException e) {
-            throw new SetupException("Impossible to create an XML log file '"
-                    + logFile
-                    + "'");
+            this.init(System.out);
+        } else {
+            try {
+                this.init(new FileOutputStream(logFile));
+            } catch (FileNotFoundException e) {
+                throw new SetupException("Impossible to create an XML log file '"
+                        + logFile
+                        + "'");
+            }
         }
     }
 
     private void init(OutputStream outputStream) {
         this.xmlSerializer.setup(new HashMap<String, Object>());
         this.xmlSerializer.setOutputStream(outputStream);
+        this.xmlSerializer.setIndent(true);
+        this.outputStream = outputStream;
+    }
+
+    @Override
+    public void setConfiguration(Map<String, ? extends Object> configuration) {
+        this.setup((Map<String, Object>) configuration);
     }
 
     @Override
     public void setup(Map<String, Object> parameters) {
-        if (parameters == null) {
+        if (parameters == null || !parameters.containsKey(LOG_FILE)) {
             return;
         }
 
-        Object logFileString = parameters.get(LOG_FILE);
-
-        OutputStream outputStream = null;
-        if (logFileString != null) {
-            File logFile = new File(String.valueOf(logFileString));
+        String logFileName = String.valueOf(parameters.get(LOG_FILE));
+        if (logFileName != null) {
+            File logFile = new File(logFileName);
+            OutputStream os;
             try {
-                outputStream = new FileOutputStream(logFile);
+                os = new FileOutputStream(logFile);
+                this.init(os);
             } catch (FileNotFoundException e) {
-                throw new SetupException("Impossible to open log file '"
+                throw new SetupException("Impossible to open XML log file '"
                         + logFile
                         + "'", e);
             }
         }
-
-        this.xmlSerializer.setOutputStream(outputStream);
     }
 
     @Override
     public void finish() {
         this.xmlSerializer.finish();
+        if (this.outputStream != null) {
+            try {
+                this.outputStream.close();
+            } catch (IOException e) {
+                LOG.debug("Impossible to close the log writer", e);
+            }
+        }
     }
 
     @Override
@@ -206,5 +231,4 @@ public final class LogAsXMLTransformer e
         this.xmlSerializer.startPrefixMapping(prefix, uri);
         super.startPrefixMapping(prefix, uri);
     }
-
 }

Modified: cocoon/cocoon3/trunk/cocoon-sitemap/src/main/resources/META-INF/cocoon/spring/cocoon-pipeline-component.xml
URL: http://svn.apache.org/viewvc/cocoon/cocoon3/trunk/cocoon-sitemap/src/main/resources/META-INF/cocoon/spring/cocoon-pipeline-component.xml?rev=1067706&r1=1067705&r2=1067706&view=diff
==============================================================================
--- cocoon/cocoon3/trunk/cocoon-sitemap/src/main/resources/META-INF/cocoon/spring/cocoon-pipeline-component.xml (original)
+++ cocoon/cocoon3/trunk/cocoon-sitemap/src/main/resources/META-INF/cocoon/spring/cocoon-pipeline-component.xml Sun Feb  6 17:28:47 2011
@@ -48,5 +48,7 @@
 
   <bean name="transformer:cleaning" class="org.apache.cocoon.sax.component.CleaningTransformer" scope="prototype" />
 
+  <bean name="transformer:logasxml" class="org.apache.cocoon.sax.component.LogAsXMLTransformer" scope="prototype" />
+
   <bean name="reader:file" class="org.apache.cocoon.sitemap.component.FileReaderComponent" scope="prototype" />
 </beans>