Author: sebb
Date: Sat Mar 12 01:55:20 2011
New Revision: 1080842
URL: http://svn.apache.org/viewvc?rev=1080842&view=rev
Log:
Better handling of unparseable articles
Modified:
commons/proper/net/trunk/src/main/java/org/apache/commons/net/nntp/Article.java
commons/proper/net/trunk/src/main/java/org/apache/commons/net/nntp/ArticleIterator.java
commons/proper/net/trunk/src/main/java/org/apache/commons/net/nntp/NNTPClient.java
Modified:
commons/proper/net/trunk/src/main/java/org/apache/commons/net/nntp/Article.java
URL:
http://svn.apache.org/viewvc/commons/proper/net/trunk/src/main/java/org/apache/commons/net/nntp/Article.java?rev=1080842&r1=1080841&r2=1080842&view=diff
==============================================================================
---
commons/proper/net/trunk/src/main/java/org/apache/commons/net/nntp/Article.java
(original)
+++
commons/proper/net/trunk/src/main/java/org/apache/commons/net/nntp/Article.java
Sat Mar 12 01:55:20 2011
@@ -39,6 +39,7 @@ public class Article implements Threadab
public Article() {
header = new StringBuffer();
+ articleNumber = -1; // isDummy
}
/**
@@ -200,7 +201,7 @@ public class Article implements Threadab
public boolean isDummy() {
- return (getSubject() == null);
+ return (articleNumber == -1);
}
public String messageThreadId() {
Modified:
commons/proper/net/trunk/src/main/java/org/apache/commons/net/nntp/ArticleIterator.java
URL:
http://svn.apache.org/viewvc/commons/proper/net/trunk/src/main/java/org/apache/commons/net/nntp/ArticleIterator.java?rev=1080842&r1=1080841&r2=1080842&view=diff
==============================================================================
---
commons/proper/net/trunk/src/main/java/org/apache/commons/net/nntp/ArticleIterator.java
(original)
+++
commons/proper/net/trunk/src/main/java/org/apache/commons/net/nntp/ArticleIterator.java
Sat Mar 12 01:55:20 2011
@@ -36,6 +36,11 @@ class ArticleIterator implements Iterato
return stringIterator.hasNext();
}
+ /**
+ * Get the next Article
+ * @return the next {@link Article}, never {@code null}, if unparseable
then isDummy()
+ * will be true, and the subject will contain the raw info.
+ */
public Article next() {
String line = stringIterator.next();
return NNTPClient.__parseArticleEntry(line);
Modified:
commons/proper/net/trunk/src/main/java/org/apache/commons/net/nntp/NNTPClient.java
URL:
http://svn.apache.org/viewvc/commons/proper/net/trunk/src/main/java/org/apache/commons/net/nntp/NNTPClient.java?rev=1080842&r1=1080841&r2=1080842&view=diff
==============================================================================
---
commons/proper/net/trunk/src/main/java/org/apache/commons/net/nntp/NNTPClient.java
(original)
+++
commons/proper/net/trunk/src/main/java/org/apache/commons/net/nntp/NNTPClient.java
Sat Mar 12 01:55:20 2011
@@ -209,9 +209,11 @@ public class NNTPClient extends NNTP
}
/**
- * Parse a response line from {@link #retrieveArticleInfo(long, long)}
+ * Parse a response line from {@link #retrieveArticleInfo(long, long)}.
+ *
* @param line a response line
- * @return the parsed {@link Article} or {@code null} if it cannot be
parsed
+ * @return the parsed {@link Article}, if unparseable then isDummy()
+ * will be true, and the subject will contain the raw info.
* @since 3.0
*/
static Article __parseArticleEntry(String line) {
@@ -219,20 +221,23 @@ public class NNTPClient extends NNTP
// Mandatory format (from NNTP RFC 2980) is :
// articleNumber\tSubject\tAuthor\tDate\tID\tReference(s)\tByte
Count\tLine Count
+ Article article = new Article();
+ article.setSubject(line); // in case parsing fails
String parts[] = line.split("\t");
if (parts.length > 6) {
int i = 0;
- Article article = new Article();
- article.setArticleNumber(Integer.parseInt(parts[i++]));
- article.setSubject(parts[i++]);
- article.setFrom(parts[i++]);
- article.setDate(parts[i++]);
- article.setArticleId(parts[i++]);
- article.addReference(parts[i++]);
- return article;
- } else {
- return null;
+ try {
+ article.setArticleNumber(Integer.parseInt(parts[i++]));
+ article.setSubject(parts[i++]);
+ article.setFrom(parts[i++]);
+ article.setDate(parts[i++]);
+ article.setArticleId(parts[i++]);
+ article.addReference(parts[i++]);
+ } catch (NumberFormatException e) {
+ // ignored, already handled
+ }
}
+ return article;
}
private NewsgroupInfo[] __readNewsgroupListing() throws IOException