You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by jo...@apache.org on 2008/05/08 07:24:42 UTC

svn commit: r654418 - in /cocoon/branches/BRANCH_2_1_X: src/blocks/html/java/org/apache/cocoon/generation/NekoHTMLGenerator.java status.xml

Author: joerg
Date: Wed May  7 22:24:42 2008
New Revision: 654418

URL: http://svn.apache.org/viewvc?rev=654418&view=rev
Log:
COCOON-2063: Fix encoding issue in NekoHTMLGenerator when reading a request parameter value.

Modified:
    cocoon/branches/BRANCH_2_1_X/src/blocks/html/java/org/apache/cocoon/generation/NekoHTMLGenerator.java
    cocoon/branches/BRANCH_2_1_X/status.xml

Modified: cocoon/branches/BRANCH_2_1_X/src/blocks/html/java/org/apache/cocoon/generation/NekoHTMLGenerator.java
URL: http://svn.apache.org/viewvc/cocoon/branches/BRANCH_2_1_X/src/blocks/html/java/org/apache/cocoon/generation/NekoHTMLGenerator.java?rev=654418&r1=654417&r2=654418&view=diff
==============================================================================
--- cocoon/branches/BRANCH_2_1_X/src/blocks/html/java/org/apache/cocoon/generation/NekoHTMLGenerator.java (original)
+++ cocoon/branches/BRANCH_2_1_X/src/blocks/html/java/org/apache/cocoon/generation/NekoHTMLGenerator.java Wed May  7 22:24:42 2008
@@ -16,9 +16,9 @@
  */
 package org.apache.cocoon.generation;
 
-import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.StringReader;
 import java.util.Map;
 import java.util.Properties;
 
@@ -75,10 +75,13 @@
 public class NekoHTMLGenerator extends ServiceableGenerator
                                implements Configurable, CacheableProcessingComponent, Disposable {
 
-    /** The parameter that specifies what request attribute to use, if any */
+    /** The parameter that specifies what request parameter to use, if any */
     public static final String FORM_NAME = "form-name";
 
-    /** The  source, if coming from a file */
+    /** The request parameter value, if coming from a request parameter */
+    private String requestParameterValue;
+
+    /** The source, if coming from a file */
     private Source inputSource;
 
     /** The source, if coming from the request */
@@ -132,11 +135,19 @@
      * All instance variables are set to <code>null</code>.
      */
     public void recycle() {
+        if (this.requestStream != null) {
+            try {
+                this.requestStream.close();
+            } catch (IOException e) {
+                // ignore
+            }
+            this.requestStream = null;
+        }
         if (this.inputSource != null) {
             this.resolver.release(this.inputSource);
             this.inputSource = null;
-            this.requestStream = null;
         }
+        this.requestParameterValue = null;
         this.xpath = null;
         super.recycle();
     }
@@ -151,7 +162,7 @@
 
         Request request = ObjectModelHelper.getRequest(objectModel);
         
-        if (src == null) {
+        if (this.source == null) {
             // Handle this request as the StreamGenerator does (from the POST
             // request or from a request parameter), but try to make sure
             // that the output will be well-formed
@@ -160,8 +171,8 @@
 
             if (contentType == null ) {
                 throw new IOException("Content-type was not specified for this request");
-            } else if (contentType.startsWith("application/x-www-form-urlencoded") ||
-                contentType.startsWith("multipart/form-data")) {
+            } else if (contentType.startsWith("application/x-www-form-urlencoded")
+                       || contentType.startsWith("multipart/form-data")) {
                 String requested = parameters.getParameter(FORM_NAME, null);
                 if (requested == null) {
                     throw new ProcessingException(
@@ -170,13 +181,10 @@
                     );
                 }
 
-                String sXml = request.getParameter(requested);
-
-                requestStream = new ByteArrayInputStream(sXml.getBytes());
-
-            } else if (contentType.startsWith("text/plain") ||
-                contentType.startsWith("text/xml") ||
-                contentType.startsWith("application/xml")) {
+                requestParameterValue = request.getParameter(requested);
+            } else if (contentType.startsWith("text/plain")
+                       || contentType.startsWith("text/xml")
+                       || contentType.startsWith("application/xml")) {
 
                 HttpServletRequest httpRequest = (HttpServletRequest) objectModel.get(HttpEnvironment.HTTP_REQUEST_OBJECT);
                 if ( httpRequest == null ) {
@@ -191,28 +199,26 @@
             } else {
                 throw new IOException("Unexpected getContentType(): " + request.getContentType());
             }
+        } else {
+            // append the request parameter to the URL if necessary
+            if (parameters.getParameterAsBoolean("copy-parameters", false)
+                    && request.getQueryString() != null) {
+                StringBuffer query = new StringBuffer(this.source);
+                query.append(this.source.indexOf("?") == -1 ? '?' : '&');
+                query.append(request.getQueryString());
+                this.source = query.toString();
+            }
 
-
+            try {
+                this.inputSource = resolver.resolveURI(this.source);
+            } catch (SourceException se) {
+                throw SourceUtil.handle("Unable to resolve " + this.source, se);
+            }
         }
 
         xpath = request.getParameter("xpath");
-        if(xpath == null)
+        if (xpath == null) {
             xpath = par.getParameter("xpath",null);
-
-        // append the request parameter to the URL if necessary
-        if (par.getParameterAsBoolean("copy-parameters", false)
-                && request.getQueryString() != null) {
-            StringBuffer query = new StringBuffer(super.source);
-            query.append(super.source.indexOf("?") == -1 ? '?' : '&');
-            query.append(request.getQueryString());
-            super.source = query.toString();
-        }
-
-        try {
-            if (source != null)
-                this.inputSource = resolver.resolveURI(super.source);
-        } catch (SourceException se) {
-            throw SourceUtil.handle("Unable to resolve " + super.source, se);
         }
     }
 
@@ -259,13 +265,21 @@
         try {
             NekoHtmlSaxParser parser = new NekoHtmlSaxParser(this.properties);
             
-            if (inputSource != null)
-                requestStream = this.inputSource.getInputStream();
-
+            InputSource saxSource;
+            if (this.requestParameterValue != null) {
+                saxSource = new InputSource(new StringReader(this.requestParameterValue));
+            }
+            else {
+                if (inputSource != null) {
+                    requestStream = this.inputSource.getInputStream();
+                }
+                saxSource = new InputSource(requestStream);
+            }
+            
             if (xpath != null) {
                 DOMBuilder builder = new DOMBuilder();
                 parser.setContentHandler(builder);
-                parser.parse(new InputSource(requestStream));
+                parser.parse(saxSource);
                 Document doc = builder.getDocument();
 
                 DOMStreamer domStreamer = new DOMStreamer(this.contentHandler,
@@ -279,9 +293,8 @@
                 this.contentHandler.endDocument();
             } else {
                 parser.setContentHandler(this.contentHandler);
-                parser.parse(new InputSource(requestStream));
+                parser.parse(saxSource);
             }
-            requestStream.close();
         } catch (IOException e){
             throw new ResourceNotFoundException("Could not get resource "
                 + this.inputSource.getURI(), e);

Modified: cocoon/branches/BRANCH_2_1_X/status.xml
URL: http://svn.apache.org/viewvc/cocoon/branches/BRANCH_2_1_X/status.xml?rev=654418&r1=654417&r2=654418&view=diff
==============================================================================
--- cocoon/branches/BRANCH_2_1_X/status.xml (original)
+++ cocoon/branches/BRANCH_2_1_X/status.xml Wed May  7 22:24:42 2008
@@ -182,8 +182,9 @@
 
   <changes>
   <release version="2.1.12" date="TBD">
-    <action dev="VG" type="fix" fixes-bug="COCOON-2063">
-      HTML: Fix encoding issue in NekoHTMLTransformer.
+    <action dev="VG, JH" type="fix" fixes-bug="COCOON-2063">
+      HTML: Fix encoding issue in NekoHTMLTransformer. Fix similar issue in NekoHTMLGenerator when reading a request
+      parameter value.
     </action>
     <action dev="JH" type="fix" fixes-bug="COCOON-1825" due-to="Vincent Demay" due-to-email="vincent@demay-fr.net">
       Forms: Fix @id handling on fi:group/fi:struct element in conjunction with AJAX requests.