pierred     00/12/21 17:27:39

  Modified:    jasper/src/share/org/apache/jasper
                        EmbededServletOptions.java JspC.java Options.java
               jasper/src/share/org/apache/jasper/compiler Compiler.java
               jasper/src/share/org/apache/jasper/resources
                        messages.properties
  Log:
  Bug fix: bug report #269 -- java.io.UnsupportedEncodingException when processing JSP
  
  From the bug report:
  
  "A "java.io.UnsupportedEncodingException: UTF8" is thrown when generating
  the servlet for a JSP file when the Kaffe VM is used. The "UTF8" encoding
  name is hardcoded in the Compiler class as the encoding for the generated
  servlet source code file. I believe the reason for using "UTF8" as opposed
  to "UTF-8" (note the dash) is that this is the only name supported in
  JDK 1.1. I suggest adding an init parameter to JspServlet for setting
  the encoding name when "UTF8" doesn't work."
  
  Given that there are several possible representations of Unicode data
  (UTF-8, UTF-16, UTF-32), and given that the supported encodings vary
  between different implementations of the Java platform,
  the best way to tackle this is probably as suggested by Hans.
  
  Added new init parameter "javaEncoding" for JspServlet.
  Default value specified in web.xml is "UTF-8".
  
  Submitted by: Hans Bergsten ( [EMAIL PROTECTED] )
  
  Revision  Changes    Path
  1.5       +15 -3     
jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/EmbededServletOptions.java
  
  Index: EmbededServletOptions.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/EmbededServletOptions.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- EmbededServletOptions.java        2000/11/06 20:52:18     1.4
  +++ EmbededServletOptions.java        2000/12/22 01:27:37     1.5
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/EmbededServletOptions.java,v
 1.4 2000/11/06 20:52:18 pierred Exp $
  - * $Revision: 1.4 $
  - * $Date: 2000/11/06 20:52:18 $
  + * $Header: 
/home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/EmbededServletOptions.java,v
 1.5 2000/12/22 01:27:37 pierred Exp $
  + * $Revision: 1.5 $
  + * $Date: 2000/12/22 01:27:37 $
    *
    * ====================================================================
    * 
  @@ -144,6 +144,12 @@
       private TldLocationsCache tldLocationsCache = null;
   
       /**
  +     * Java platform encoding to generate the JSP
  +     * page servlet.
  +     */
  +    private String javaEncoding;
  +
  +    /**
        * Are we keeping generated code around?
        */
       public boolean getKeepGenerated() {
  @@ -218,6 +224,10 @@
        return tldLocationsCache;
       }
   
  +    public String getJavaEncoding() {
  +     return javaEncoding;
  +    }
  +
       /**
        * Create an EmbededServletOptions object using data available from
        * ServletConfig and ServletContext. 
  @@ -320,6 +330,8 @@
                                     Logger.FATAL);
               }
           }
  +
  +        this.javaEncoding = config.getInitParameter("javaEncoding");
   
        // Setup the global Tag Libraries location cache for this
        // web-application.
  
  
  
  1.7       +7 -3      jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/JspC.java
  
  Index: JspC.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/JspC.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- JspC.java 2000/11/06 20:52:19     1.6
  +++ JspC.java 2000/12/22 01:27:37     1.7
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/JspC.java,v 1.6 
2000/11/06 20:52:19 pierred Exp $
  - * $Revision: 1.6 $
  - * $Date: 2000/11/06 20:52:19 $
  + * $Header: 
/home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/JspC.java,v 1.7 
2000/12/22 01:27:37 pierred Exp $
  + * $Revision: 1.7 $
  + * $Date: 2000/12/22 01:27:37 $
    *
    * ====================================================================
    * 
  @@ -210,6 +210,10 @@
   
       public TldLocationsCache getTldLocationsCache() {
        return tldLocationsCache;
  +    }
  +
  +    public String getJavaEncoding() {
  +     return "UTF-8";
       }
   
       public String getClassPath() {
  
  
  
  1.5       +9 -3      
jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/Options.java
  
  Index: Options.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/Options.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- Options.java      2000/11/06 20:52:20     1.4
  +++ Options.java      2000/12/22 01:27:38     1.5
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/Options.java,v 1.4 
2000/11/06 20:52:20 pierred Exp $
  - * $Revision: 1.4 $
  - * $Date: 2000/11/06 20:52:20 $
  + * $Header: 
/home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/Options.java,v 1.5 
2000/12/22 01:27:38 pierred Exp $
  + * $Revision: 1.5 $
  + * $Date: 2000/12/22 01:27:38 $
    *
    * ====================================================================
    * 
  @@ -141,4 +141,10 @@
        * for the web-application.
        */
       public TldLocationsCache getTldLocationsCache();
  +
  +    /**
  +     * Java platform encoding to generate the JSP
  +     * page servlet.
  +     */
  +    public String getJavaEncoding();
   }
  
  
  
  1.6       +36 -11    
jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/Compiler.java
  
  Index: Compiler.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/Compiler.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- Compiler.java     2000/12/16 23:27:38     1.5
  +++ Compiler.java     2000/12/22 01:27:38     1.6
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/Compiler.java,v
 1.5 2000/12/16 23:27:38 craigmcc Exp $
  - * $Revision: 1.5 $
  - * $Date: 2000/12/16 23:27:38 $
  + * $Header: 
/home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/Compiler.java,v
 1.6 2000/12/22 01:27:38 pierred Exp $
  + * $Revision: 1.6 $
  + * $Date: 2000/12/22 01:27:38 $
    *
    * ====================================================================
    * 
  @@ -66,6 +66,7 @@
   import java.io.PrintWriter;
   import java.io.ByteArrayOutputStream;
   import java.io.FileOutputStream;
  +import java.io.OutputStreamWriter;
   
   import org.apache.jasper.JspCompilationContext;
   import org.apache.jasper.Constants;
  @@ -138,14 +139,38 @@
                             Logger.DEBUG);
   
           // Setup the ServletWriter
  -        //String javaEncoding = "BADENC77";           // perhaps debatable?
  -     String javaEncoding = "UTF8";           // perhaps debatable?
  -        //   System.out.println("SERVLET ENCODING IS: " + javaEncoding);
  -        ServletWriter writer = 
  -            (new ServletWriter
  -                (new PrintWriter
  -                    (new java.io.OutputStreamWriter(
  -                        new FileOutputStream(javaFileName),javaEncoding))));
  +     // We try UTF8 by default. If it fails, we use the java encoding 
  +     // specified for JspServlet init parameter "javaEncoding".
  +
  +     String javaEncoding = "UTF8"; 
  +     OutputStreamWriter osw; 
  +     try {
  +         osw = new OutputStreamWriter(
  +                   new FileOutputStream(javaFileName),javaEncoding);
  +     } catch (java.io.UnsupportedEncodingException ex) {
  +         // Try to get the java encoding from the "javaEncoding"
  +         // init parameter for JspServlet.
  +         javaEncoding = ctxt.getOptions().getJavaEncoding();
  +         if (javaEncoding != null) {
  +             try {
  +                 osw = new OutputStreamWriter(
  +                           new FileOutputStream(javaFileName),javaEncoding);
  +             } catch (java.io.UnsupportedEncodingException ex2) {
  +                 // no luck :-(
  +                 throw new JasperException(
  +                     Constants.getString("jsp.error.invalid.javaEncoding",
  +                                         new Object[] { 
  +                                             "UTF8", 
  +                                             javaEncoding,
  +                                         }));
  +             }
  +         } else {
  +             throw new JasperException(
  +                 Constants.getString("jsp.error.needAlternateJavaEncoding",
  +                                     new Object[] { "UTF8" }));              
  +         }
  +     }
  +     ServletWriter writer = new ServletWriter(new PrintWriter(osw));
           ctxt.setWriter(writer);
   
        /* NOT COMPILED -- remove eventually -- kept for temp reference
  
  
  
  1.13      +3 -1      
jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/resources/messages.properties
  
  Index: messages.properties
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/resources/messages.properties,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- messages.properties       2000/12/08 20:46:23     1.12
  +++ messages.properties       2000/12/22 01:27:39     1.13
  @@ -1,4 +1,4 @@
  -# $Id: messages.properties,v 1.12 2000/12/08 20:46:23 pierred Exp $
  +# $Id: messages.properties,v 1.13 2000/12/22 01:27:39 pierred Exp $
   #
   # Default localized string information
   # Localized this the Default Locale as is en_US
  @@ -233,3 +233,5 @@
   jspx.error.templateDataNotInJspCdata=Validation Error: Element <{0}> cannot 
have template data. Template data must be encapsulated within a <jsp:cdata> 
element. [JSP1.2 PFD section 5.1.9]\nTemplate data in error: {1}
   #Error while processing taglib jar file {0}: {1}
   jsp.error.taglib.jarFileException=
  +jsp.error.invalid.javaEncoding=Invalid java encodings. Tried {0} and then {1}. Both 
failed.
  +jsp.error.needAlternateJavaEncoding=Default java encoding {0} is invalid on your 
java platform. An alternate can be specified via the 'javaEncoding' parameter of 
JspServlet.
  
  
  

Reply via email to