You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by bu...@apache.org on 2004/08/18 08:27:45 UTC

DO NOT REPLY [Bug 30719] - The FTPClient is unable to list files on Japanese servers.

DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://issues.apache.org/bugzilla/show_bug.cgi?id=30719>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://issues.apache.org/bugzilla/show_bug.cgi?id=30719

The FTPClient is unable to list files on Japanese servers.





------- Additional Comments From leif@tanukisoftware.com  2004-08-18 06:27 -------
Here is the full patch:

cvs diff -u 
cvs server: Diffing .
cvs server: Diffing proposal
cvs server: Diffing proposal/ftp2
cvs server: Diffing proposal/ftp2/src
cvs server: Diffing proposal/ftp2/src/java
cvs server: Diffing proposal/ftp2/src/java/org
cvs server: Diffing proposal/ftp2/src/java/org/apache
cvs server: Diffing proposal/ftp2/src/java/org/apache/commons
cvs server: Diffing proposal/ftp2/src/java/org/apache/commons/net
cvs server: Diffing proposal/ftp2/src/java/org/apache/commons/net/ftp
cvs server: Diffing proposal/ftp2/src/java/org/apache/commons/net/ftp/ftp2
cvs server: Diffing proposal/ftp2/src/java/org/apache/commons/net/ftp/ftp2/parser
cvs server: Diffing proposal/ftp2/src/test
cvs server: Diffing proposal/ftp2/src/test/org
cvs server: Diffing proposal/ftp2/src/test/org/apache
cvs server: Diffing proposal/ftp2/src/test/org/apache/commons
cvs server: Diffing proposal/ftp2/src/test/org/apache/commons/net
cvs server: Diffing proposal/ftp2/src/test/org/apache/commons/net/ftp
cvs server: Diffing proposal/ftp2/src/test/org/apache/commons/net/ftp/ftp2
cvs server: Diffing proposal/ftp2/src/test/org/apache/commons/net/ftp/ftp2/parser
cvs server: Diffing src
cvs server: Diffing src/java
cvs server: Diffing src/java/examples
cvs server: Diffing src/java/org
cvs server: Diffing src/java/org/apache
cvs server: Diffing src/java/org/apache/commons
cvs server: Diffing src/java/org/apache/commons/net
cvs server: Diffing src/java/org/apache/commons/net/bsd
cvs server: Diffing src/java/org/apache/commons/net/ftp
Index: src/java/org/apache/commons/net/ftp/FTP.java
===================================================================
RCS file:
/home/cvspublic/jakarta-commons/net/src/java/org/apache/commons/net/ftp/FTP.java,v
retrieving revision 1.16
diff -u -r1.16 FTP.java
--- src/java/org/apache/commons/net/ftp/FTP.java	8 Aug 2004 20:38:35 -0000	1.16
+++ src/java/org/apache/commons/net/ftp/FTP.java	18 Aug 2004 06:11:31 -0000
@@ -420,6 +420,11 @@
      ***/
     public int sendCommand(String command, String args) throws IOException
     {
+        if ((__commandBuffer == null) || (_controlOutput == null))
+        {
+            throw new IOException("Not connected.");
+        }
+        
         String message;
 
         __commandBuffer.setLength(0);
Index: src/java/org/apache/commons/net/ftp/FTPClient.java
===================================================================
RCS file:
/home/cvspublic/jakarta-commons/net/src/java/org/apache/commons/net/ftp/FTPClient.java,v
retrieving revision 1.38
diff -u -r1.38 FTPClient.java
--- src/java/org/apache/commons/net/ftp/FTPClient.java	29 Jun 2004 04:54:30
-0000	1.38
+++ src/java/org/apache/commons/net/ftp/FTPClient.java	18 Aug 2004 06:11:32 -0000
@@ -1931,8 +1931,8 @@
         if ((socket = _openDataConnection_(FTPCommand.NLST, pathname)) == null)
             return null;
 
-        reader =
-            new BufferedReader(new InputStreamReader(socket.getInputStream()));
+        reader = new BufferedReader(
+            new InputStreamReader(socket.getInputStream(), getControlEncoding()));
 
         results = new Vector();
         while ((line = reader.readLine()) != null)
@@ -2338,7 +2338,7 @@
         }
 
 
-        engine.readServerList(socket.getInputStream());
+        engine.readServerList(socket.getInputStream(), getControlEncoding());
 
         socket.close();
 
@@ -2425,7 +2425,7 @@
         if ((socket = _openDataConnection_(FTPCommand.LIST, pathname)) == null)
             return new FTPFile[0];
 
-        results = parser.parseFileList(socket.getInputStream());
+        results = parser.parseFileList(socket.getInputStream(),
getControlEncoding());
 
         socket.close();
 
Index: src/java/org/apache/commons/net/ftp/FTPFileEntryParserImpl.java
===================================================================
RCS file:
/home/cvspublic/jakarta-commons/net/src/java/org/apache/commons/net/ftp/FTPFileEntryParserImpl.java,v
retrieving revision 1.8
diff -u -r1.8 FTPFileEntryParserImpl.java
--- src/java/org/apache/commons/net/ftp/FTPFileEntryParserImpl.java	22 Apr 2004
00:48:07 -0000	1.8
+++ src/java/org/apache/commons/net/ftp/FTPFileEntryParserImpl.java	18 Aug 2004
06:11:32 -0000
@@ -34,7 +34,7 @@
      * The constructor for a FTPFileEntryParserImpl object.
      */
     public FTPFileEntryParserImpl()
-        {
+    {
     }
 
 
@@ -47,16 +47,37 @@
      * <p>
      * @param listStream The InputStream from which the file list should be
      *        read.
+     * @param encoding The encoding to use, null for system default.
      * @return The list of file information contained in the given path.  null
      *     if the list could not be obtained or if there are no files in
      *     the directory.
      * @exception java.io.IOException  If an I/O error occurs reading the
listStream.
      ***/
-    public FTPFile[] parseFileList(InputStream listStream) throws IOException
+    public FTPFile[] parseFileList(InputStream listStream, String encoding)
throws IOException
     {
-        FTPFileList ffl = FTPFileList.create(listStream, this);
+        FTPFileList ffl = FTPFileList.create(listStream, this, encoding);
         return ffl.getFiles();
+    }
 
+    /***
+     * Parses an FTP server file listing and converts it into a usable format
+     * in the form of an array of <code> FTPFile </code> instances.  If the
+     * file list contains no files, <code> null </code> should be
+     * returned, otherwise an array of <code> FTPFile </code> instances
+     * representing the files in the directory is returned.
+     * <p>
+     * @param listStream The InputStream from which the file list should be
+     *        read.
+     * @return The list of file information contained in the given path.  null
+     *     if the list could not be obtained or if there are no files in
+     *     the directory.
+     * @exception java.io.IOException  If an I/O error occurs reading the
listStream.
+     *
+     * @deprecated The version of this method which takes an encoding should be
used.
+     ***/
+    public FTPFile[] parseFileList(InputStream listStream) throws IOException
+    {
+        return parseFileList(listStream, null);
     }
 
     /**
Index: src/java/org/apache/commons/net/ftp/FTPFileList.java
===================================================================
RCS file:
/home/cvspublic/jakarta-commons/net/src/java/org/apache/commons/net/ftp/FTPFileList.java,v
retrieving revision 1.13
diff -u -r1.13 FTPFileList.java
--- src/java/org/apache/commons/net/ftp/FTPFileList.java	21 Apr 2004 23:30:33
-0000	1.13
+++ src/java/org/apache/commons/net/ftp/FTPFileList.java	18 Aug 2004 06:11:32 -0000
@@ -82,6 +82,7 @@
      * the output of the LIST command was returned
      * @param parser the default <code>FTPFileEntryParser</code> to be used
      * by this object.  This may later be changed using the init() method.
+     * @param encoding The encoding to use, null for system default.
      *
      * @return the <code>FTPFileList</code> created, with an initialized
      * of unparsed lines of output.  Will be null if the listing cannot
@@ -90,26 +91,61 @@
      *                   Thrown on any failure to read from the socket.
      */
     public static FTPFileList create(InputStream stream,
-                                      FTPFileEntryParser parser)
+                                     FTPFileEntryParser parser,
+                                     String encoding)
             throws IOException
     {
         FTPFileList list = new FTPFileList(parser);
-        list.readStream(stream);
+        list.readStream(stream, encoding);
         parser.preParse(list.lines);
         return list;
     }
 
     /**
+     * The only way to create an <code>FTPFileList</code> object.  Invokes
+     * the private constructor and then reads the stream  supplied stream to
+     * build the intermediate array of "lines" which will later be parsed
+     * into <code>FTPFile</code> object.
+     *
+     * @param stream The input stream created by reading the socket on which
+     * the output of the LIST command was returned
+     * @param parser the default <code>FTPFileEntryParser</code> to be used
+     * by this object.  This may later be changed using the init() method.
+     *
+     * @return the <code>FTPFileList</code> created, with an initialized
+     * of unparsed lines of output.  Will be null if the listing cannot
+     * be read from the stream.
+     * @exception IOException
+     *                   Thrown on any failure to read from the socket.
+     *
+     * @deprecated The version of this method which takes an encoding should be
used.
+     */
+    public static FTPFileList create(InputStream stream,
+                                     FTPFileEntryParser parser)
+            throws IOException
+    {
+        return create(stream, parser, null);
+    }
+
+    /**
      * internal method for reading the input into the <code>lines</code> vector.
      *
      * @param stream The socket stream on which the input will be read.
+     * @param encoding The encoding to use, null for system default.
      *
      * @exception IOException thrown on any failure to read the stream
      */
-    public void readStream(InputStream stream) throws IOException
+    public void readStream(InputStream stream, String encoding) throws IOException
     {
-        BufferedReader reader =
-            new BufferedReader(new InputStreamReader(stream));
+        BufferedReader reader;
+        if (encoding == null)
+        {
+            reader = new BufferedReader(new InputStreamReader(stream));
+        }
+        else
+        {
+            reader = new BufferedReader(new InputStreamReader(stream, encoding));
+        }
 
         String line = this.parser.readNextEntry(reader);
 
@@ -119,6 +155,20 @@
             line = this.parser.readNextEntry(reader);
         }
         reader.close();
+    }
+
+    /**
+     * internal method for reading the input into the <code>lines</code> vector.
+     *
+     * @param stream The socket stream on which the input will be read.
+     *
+     * @exception IOException thrown on any failure to read the stream
+     *
+     * @deprecated The version of this method which takes an encoding should be
used.
+     */
+    public void readStream(InputStream stream) throws IOException
+    {
+        readStream(stream, null);
     }
 
     /**
Index: src/java/org/apache/commons/net/ftp/FTPFileListParser.java
===================================================================
RCS file:
/home/cvspublic/jakarta-commons/net/src/java/org/apache/commons/net/ftp/FTPFileListParser.java,v
retrieving revision 1.12
diff -u -r1.12 FTPFileListParser.java
--- src/java/org/apache/commons/net/ftp/FTPFileListParser.java	29 Jun 2004
02:16:33 -0000	1.12
+++ src/java/org/apache/commons/net/ftp/FTPFileListParser.java	18 Aug 2004
06:11:32 -0000
@@ -45,10 +45,29 @@
      * <p>
      * @param listStream The InputStream from which the file list should be
      *        read.
+     * @param encoding The encoding to use, null for system default.
      * @return The list of file information contained in the given path.  null
      *     if the list could not be obtained or if there are no files in
      *     the directory.
      * @exception IOException  If an I/O error occurs reading the listStream.
+     ***/
+    FTPFile[] parseFileList(InputStream listStream, String encoding) throws
IOException;
+
+    /***
+     * Parses an FTP server file listing and converts it into a usable format
+     * in the form of an array of <code> FTPFile </code> instances.  If the
+     * file list contains no files, <code> null </code> should be
+     * returned, otherwise an array of <code> FTPFile </code> instances
+     * representing the files in the directory is returned.
+     * <p>
+     * @param listStream The InputStream from which the file list should be
+     *        read.
+     * @return The list of file information contained in the given path.  null
+     *     if the list could not be obtained or if there are no files in
+     *     the directory.
+     * @exception IOException  If an I/O error occurs reading the listStream.
+     *
+     * @deprecated The version of this method which takes an encoding should be
used.
      ***/
     FTPFile[] parseFileList(InputStream listStream) throws IOException;
 
Index: src/java/org/apache/commons/net/ftp/FTPListParseEngine.java
===================================================================
RCS file:
/home/cvspublic/jakarta-commons/net/src/java/org/apache/commons/net/ftp/FTPListParseEngine.java,v
retrieving revision 1.7
diff -u -r1.7 FTPListParseEngine.java
--- src/java/org/apache/commons/net/ftp/FTPListParseEngine.java	22 Apr 2004
00:48:07 -0000	1.7
+++ src/java/org/apache/commons/net/ftp/FTPListParseEngine.java	18 Aug 2004
06:11:33 -0000
@@ -87,19 +87,39 @@
      * on the server.
      *
      * @param stream input stream provided by the server socket.
+     * @param encoding The encoding to use, null for system default.
      *
      * @exception IOException
      *                   thrown on any failure to read from the sever.
      */
-    public void readServerList(InputStream stream)
+    public void readServerList(InputStream stream, String encoding)
     throws IOException
     {
         this.entries = new LinkedList();
-        readStream(stream);
+        readStream(stream, encoding);
         this.parser.preParse(this.entries);
         resetIterator();
     }
 
+    /**
+     * handle the iniitial reading and preparsing of the list returned by
+     * the server.  After this method has completed, this object will contain
+     * a list of unparsed entries (Strings) each referring to a unique file
+     * on the server.
+     *
+     * @param stream input stream provided by the server socket.
+     *
+     * @exception IOException
+     *                   thrown on any failure to read from the sever.
+     *
+     * @deprecated The version of this method which takes an encoding should be
used.
+     */
+    public void readServerList(InputStream stream)
+    throws IOException
+    {
+        readServerList(stream, null);
+    }
+
 
     /**
      * Internal method for reading the input into the <code>entries</code> list.
@@ -110,14 +130,22 @@
      * and other data that will not be part of the final listing.
      *
      * @param stream The socket stream on which the input will be read.
+     * @param encoding The encoding to use, null for system default.
      *
      * @exception IOException
      *                   thrown on any failure to read the stream
      */
-    private void readStream(InputStream stream) throws IOException
+    private void readStream(InputStream stream, String encoding) throws IOException
     {
-        BufferedReader reader =
-            new BufferedReader(new InputStreamReader(stream));
+        BufferedReader reader;
+        if (encoding == null)
+        {
+            reader = new BufferedReader(new InputStreamReader(stream));
+        }
+        else
+        {
+            reader = new BufferedReader(new InputStreamReader(stream, encoding));
+        }
 
         String line = this.parser.readNextEntry(reader);
 
cvs server: Diffing src/java/org/apache/commons/net/ftp/parser
Index: src/java/org/apache/commons/net/ftp/parser/UnixFTPEntryParser.java
===================================================================
RCS file:
/home/cvspublic/jakarta-commons/net/src/java/org/apache/commons/net/ftp/parser/UnixFTPEntryParser.java,v
retrieving revision 1.18
diff -u -r1.18 UnixFTPEntryParser.java
--- src/java/org/apache/commons/net/ftp/parser/UnixFTPEntryParser.java	28 Jul
2004 05:01:47 -0000	1.18
+++ src/java/org/apache/commons/net/ftp/parser/UnixFTPEntryParser.java	18 Aug
2004 06:11:33 -0000
@@ -35,7 +35,7 @@
      * to determine which month is matched by the parser
      */
     private static final String MONTHS =
-        "(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)";
+        "Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec";
 
     /**
      * this is the regular expression used by this parser.
@@ -55,6 +55,15 @@
      *        execution is on
      *    T   the 1000 bit is turned on, and execution is off (undefined bit-
      *        state)
+     *
+     * Japanese formatted listings use numerical months, and the month, day
+     *  and year are each followed by a single kanji character.  Rather than
+     *  testing for the specific kanji characters, this expression allows any
+     *  non-numerical, non-space character(s).  This should make other languages
+     *  which use a similar syntax work as well.
+     *
+     * (For Japanese, the matched characters are '\u6708' after month,
+     *  '\u65e5' after day, and '\u5e74' after year.)
      */
     private static final String REGEX =
         "([bcdlfmpSs-])"
@@ -63,9 +72,9 @@
         + "(\\S+)\\s+"
         + "(?:(\\S+)\\s+)?"
         + "(\\d+)\\s+"
-        + MONTHS + "\\s+"
-        + "((?:[0-9])|(?:[0-2][0-9])|(?:3[0-1]))\\s+"
-        + "((\\d\\d\\d\\d)|((?:[01]\\d)|(?:2[0123])|(?:[1-9])):([012345]\\d))\\s+"
+        + "((?:" + MONTHS + ")|(?:(?:(?:[0-9])|(?:[0-1][0-9]))))[^0-9\\s]*?\\s+"
+        + "(?:((?:[0-9])|(?:[0-2][0-9])|(?:3[0-1]))(?:[^0-9\\s]*?))\\s+"
+        +
"((?:(\\d\\d\\d\\d)[^0-9\\s]*?)|((?:[01]\\d)|(?:2[0123])|(?:[1-9])):([012345]\\d))\\s+"
         + "(\\S+)(\\s*.*)";
 
 
@@ -94,7 +103,6 @@
      */
     public FTPFile parseFTPEntry(String entry)
     {
-
         FTPFile file = new FTPFile();
         file.setRawListing(entry);
         int type;
@@ -114,7 +122,7 @@
             String min = group(24);
             String name = group(25);
             String endtoken = group(26);
-
+            
             // bcdlfmpSs-
             switch (typeStr.charAt(0))
             {
@@ -130,8 +138,8 @@
                 // break; - fall through
             case 'f':
             case '-':
-            	type = FTPFile.FILE_TYPE;
-            	break;
+                type = FTPFile.FILE_TYPE;
+                break;
             default:
                 type = FTPFile.UNKNOWN_TYPE;
             }
@@ -189,8 +197,17 @@
 
             try
             {
+                int month;
                 int pos = MONTHS.indexOf(mo);
-                int month = pos / 4;
+                if ( pos >= 0 )
+                {
+                    month = pos / 4;
+                }
+                else
+                {
+                    // Expected to be base-0
+                    month = Integer.parseInt( mo ) - 1;
+                }
 
                 if (null != yr)
                 {
Index: src/java/org/apache/commons/net/ftp/parser/VMSFTPEntryParser.java
===================================================================
RCS file:
/home/cvspublic/jakarta-commons/net/src/java/org/apache/commons/net/ftp/parser/VMSFTPEntryParser.java,v
retrieving revision 1.24
diff -u -r1.24 VMSFTPEntryParser.java
--- src/java/org/apache/commons/net/ftp/parser/VMSFTPEntryParser.java	28 Jul
2004 05:01:47 -0000	1.24
+++ src/java/org/apache/commons/net/ftp/parser/VMSFTPEntryParser.java	18 Aug
2004 06:11:33 -0000
@@ -94,18 +94,17 @@
      * <p>
      * @param listStream The InputStream from which the file list should be
      *        read.
+     * @param encoding The encoding to use, null for system default.
      * @return The list of file information contained in the given path.  null
      *     if the list could not be obtained or if there are no files in
      *     the directory.
      * @exception IOException  If an I/O error occurs reading the listStream.
      ***/
-    public FTPFile[] parseFileList(InputStream listStream) throws IOException {
+    public FTPFile[] parseFileList(InputStream listStream, String encoding)
throws IOException {
         FTPListParseEngine engine = new FTPListParseEngine(this);
-        engine.readServerList(listStream);
+        engine.readServerList(listStream, encoding);
         return engine.getFiles();
     }
-
-
 
     /**
      * Parses a line of a VMS FTP server file listing and converts it into a
cvs server: Diffing src/java/org/apache/commons/net/io
cvs server: Diffing src/java/org/apache/commons/net/nntp
cvs server: Diffing src/java/org/apache/commons/net/pop3
cvs server: Diffing src/java/org/apache/commons/net/smtp
cvs server: Diffing src/java/org/apache/commons/net/telnet
cvs server: Diffing src/java/org/apache/commons/net/tftp
cvs server: Diffing src/java/org/apache/commons/net/util
cvs server: Diffing src/test
cvs server: Diffing src/test/org
cvs server: Diffing src/test/org/apache
cvs server: Diffing src/test/org/apache/commons
cvs server: Diffing src/test/org/apache/commons/net
cvs server: Diffing src/test/org/apache/commons/net/ftp
cvs server: Diffing src/test/org/apache/commons/net/ftp/parser
Index: src/test/org/apache/commons/net/ftp/parser/UnixFTPEntryParserTest.java
===================================================================
RCS file:
/home/cvspublic/jakarta-commons/net/src/test/org/apache/commons/net/ftp/parser/UnixFTPEntryParserTest.java,v
retrieving revision 1.14
diff -u -r1.14 UnixFTPEntryParserTest.java
--- src/test/org/apache/commons/net/ftp/parser/UnixFTPEntryParserTest.java	29
Jul 2004 11:38:36 -0000	1.14
+++ src/test/org/apache/commons/net/ftp/parser/UnixFTPEntryParserTest.java	18
Aug 2004 06:11:33 -0000
@@ -14,7 +14,6 @@
  * limitations under the License.
  */
 package org.apache.commons.net.ftp.parser;
-
 import java.util.Calendar;
 
 import junit.framework.TestSuite;
@@ -69,7 +68,9 @@
         "-rwxr-xr-t   1 500      500             0 Mar 25 08:21 testStickyExec",
         "-rwSr-Sr--   1 500      500             0 Mar 25 08:22 testSuid",
         "-rwsr-sr--   1 500      500             0 Mar 25 08:23 testSuidExec",
-		"-rw-r--r--   1 1        3518644 May 25 12:12 std"
+        "-rw-r--r--   1 1        3518644 May 25 12:12 std",
+        "-rw-rw----   1 ep1adm   sapsys         0  8\u6708 17\u65e5  20:10
caerrinf",
+        "-rw-rw----   1 ep1adm   sapsys         0  6\u6708  3\u65e5 2003\u5e74
\u8a66\u9a13\u30d5\u30a1\u30a4\u30eb.csv"
     };
 
     /**
@@ -215,6 +216,78 @@
         cal.set(Calendar.DATE,2);
         cal.set(Calendar.HOUR_OF_DAY, 15);
         cal.set(Calendar.MINUTE, 13);
+        assertEquals(df.format(cal.getTime()),
+                     df.format(f.getTimestamp().getTime()));
+    }
+
+    /**
+     * @see
org.apache.commons.net.ftp.parser.FTPParseTestFramework#testParseFieldsOnFile()
+     */
+    public void testParseFieldsOnFileJapaneseTime() throws Exception
+    {
+        FTPFile f = getParser().parseFTPEntry("-rwxr-xr-x   2 user     group  
      4096 3\u6708  2\u65e5 15:13 zxbox");
+        assertNotNull("Could not parse entry.",
+                      f);
+        assertTrue("Should have been a file.",
+                   f.isFile());
+        checkPermissions(f);
+        assertEquals(2,
+                     f.getHardLinkCount());
+        assertEquals("user",
+                     f.getUser());
+        assertEquals("group",
+                     f.getGroup());
+        assertEquals("zxbox",
+                     f.getName());
+        assertEquals(4096,
+                     f.getSize());
+
+        Calendar cal = Calendar.getInstance();
+        cal.set(Calendar.MONTH, Calendar.MARCH);
+
+        cal.set(Calendar.DATE,1);
+        cal.set(Calendar.HOUR_OF_DAY, 0);
+        cal.set(Calendar.MINUTE, 0);
+        cal.set(Calendar.SECOND, 0);
+        if (f.getTimestamp().getTime().before(cal.getTime())) {
+            cal.add(Calendar.YEAR, -1);
+        }
+        cal.set(Calendar.DATE,2);
+        cal.set(Calendar.HOUR_OF_DAY, 15);
+        cal.set(Calendar.MINUTE, 13);
+        assertEquals(df.format(cal.getTime()),
+                     df.format(f.getTimestamp().getTime()));
+    }
+
+    /**
+     * @see
org.apache.commons.net.ftp.parser.FTPParseTestFramework#testParseFieldsOnFile()
+     */
+    public void testParseFieldsOnFileJapaneseYear() throws Exception
+    {
+        FTPFile f = getParser().parseFTPEntry("-rwxr-xr-x   2 user     group  
      4096 3\u6708  2\u65e5 2003\u5e74 \u8a66\u9a13\u30d5\u30a1\u30a4\u30eb.csv");
+        assertNotNull("Could not parse entry.",
+                      f);
+        assertTrue("Should have been a file.",
+                   f.isFile());
+        checkPermissions(f);
+        assertEquals(2,
+                     f.getHardLinkCount());
+        assertEquals("user",
+                     f.getUser());
+        assertEquals("group",
+                     f.getGroup());
+        assertEquals("\u8a66\u9a13\u30d5\u30a1\u30a4\u30eb.csv",
+                     f.getName());
+        assertEquals(4096,
+                     f.getSize());
+
+        Calendar cal = Calendar.getInstance();
+        cal.set(Calendar.YEAR, 2003);
+        cal.set(Calendar.MONTH, Calendar.MARCH);
+        cal.set(Calendar.DATE,2);
+        cal.set(Calendar.HOUR_OF_DAY, 0);
+        cal.set(Calendar.MINUTE, 0);
+        cal.set(Calendar.SECOND, 0);
         assertEquals(df.format(cal.getTime()),
                      df.format(f.getTimestamp().getTime()));
     }
Index: src/test/org/apache/commons/net/ftp/parser/VMSFTPEntryParserTest.java
===================================================================
RCS file:
/home/cvspublic/jakarta-commons/net/src/test/org/apache/commons/net/ftp/parser/VMSFTPEntryParserTest.java,v
retrieving revision 1.16
diff -u -r1.16 VMSFTPEntryParserTest.java
--- src/test/org/apache/commons/net/ftp/parser/VMSFTPEntryParserTest.java	29 Jun
2004 04:54:32 -0000	1.16
+++ src/test/org/apache/commons/net/ftp/parser/VMSFTPEntryParserTest.java	18 Aug
2004 06:11:33 -0000
@@ -91,7 +91,7 @@
         VMSFTPEntryParser parser = new VMSFTPEntryParser();
         FTPListParseEngine engine = new FTPListParseEngine(parser);
         engine.readServerList(
-                new ByteArrayInputStream(fullListing.getBytes()));
+                new ByteArrayInputStream(fullListing.getBytes()), "ISO-8859-1");
         FTPFile[] files = engine.getFiles();
         assertEquals(6, files.length);
         assertFileInListing(files, "2-JUN.LIS");
@@ -111,7 +111,7 @@
         VMSFTPEntryParser parser = new VMSVersioningFTPEntryParser();
         FTPListParseEngine engine = new FTPListParseEngine(parser);
         engine.readServerList(
-                new ByteArrayInputStream(fullListing.getBytes()));
+                new ByteArrayInputStream(fullListing.getBytes()), "ISO-8859-1");
         FTPFile[] files = engine.getFiles();
         assertEquals(3, files.length);
         assertFileInListing(files, "1-JUN.LIS;1");
cvs server: Diffing src/test/org/apache/commons/net/telnet
cvs server: Diffing xdocs
cvs server: Diffing xdocs/images

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