You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by jf...@apache.org on 2005/05/04 09:30:24 UTC

cvs commit: jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/loader WebappClassLoader.java

jfclere     2005/05/04 00:30:24

  Modified:    catalina/src/share/org/apache/catalina/loader
                        WebappClassLoader.java
  Log:
  Allow to use properties in native encoding.
  In EBCDIC Environments the FileInputStream is localized but not the
  ByteArrayInputStream therefore loading a properties from such
  a file using the WebappClassLoader class loader failed.
  
  Revision  Changes    Path
  1.49      +32 -2     jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/loader/WebappClassLoader.java
  
  Index: WebappClassLoader.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/loader/WebappClassLoader.java,v
  retrieving revision 1.48
  retrieving revision 1.49
  diff -u -r1.48 -r1.49
  --- WebappClassLoader.java	30 Mar 2005 13:01:00 -0000	1.48
  +++ WebappClassLoader.java	4 May 2005 07:30:24 -0000	1.49
  @@ -354,6 +354,11 @@
        */
       protected boolean hasExternalRepositories = false;
   
  +    /**
  +     * need conversion for properties files
  +     */
  +    protected boolean needConvert = false;
  +
   
       /**
        * All permission.
  @@ -1444,6 +1449,15 @@
       public void start() throws LifecycleException {
   
           started = true;
  +        String encoding = null;
  +        try {
  +            encoding = System.getProperty("file.encoding");
  +        } catch (Exception e) {
  +            return;
  +        }
  +        if (encoding.indexOf("EBCDIC")!=-1) {
  +            needConvert = true;
  +        }
   
       }
   
  @@ -1695,6 +1709,8 @@
   
           Resource resource = null;
   
  +        boolean fileNeedConvert = false;
  +
           for (i = 0; (entry == null) && (i < repositoriesLength); i++) {
               try {
   
  @@ -1728,6 +1744,12 @@
                           return null;
                       }
   
  +                    if (needConvert) {
  +                        if (path.endsWith(".properties")) {
  +                            fileNeedConvert = true;
  +                        }
  +                    }
  +
                       // Register the full path for modification checking
                       // Note: Only syncing on a 'constant' object is needed
                       synchronized (allPermission) {
  @@ -1855,8 +1877,8 @@
   
                   byte[] binaryContent = new byte[contentLength];
   
  +                int pos = 0;
                   try {
  -                    int pos = 0;
   
                       while (true) {
                           int n = binaryStream.read(binaryContent, pos,
  @@ -1874,6 +1896,14 @@
                       return null;
                   }
   
  +                if (fileNeedConvert) {
  +                    String str = new String(binaryContent,0,pos);
  +                    try {
  +                        binaryContent = str.getBytes("UTF-8");
  +                    } catch (Exception e) {
  +                        return null;
  +                    }
  +                }
                   entry.binaryContent = binaryContent;
   
                   // The certificates are only available after the JarEntry 
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org