fix Class.assinable bug

master
yihua.huang 2013-08-03 17:17:59 +08:00
parent 65518f7672
commit 69245e8c03
3 changed files with 19 additions and 7 deletions

View File

@ -39,7 +39,7 @@ class PageModelExtractor {
this.clazz = clazz;
initTargetUrlPatterns();
fieldExtractors = new ArrayList<FieldExtractor>();
if (clazz.isAssignableFrom(AfterExtractor.class)) {
if (AfterExtractor.class.isAssignableFrom(clazz)) {
try {
afterExtractor = (AfterExtractor) clazz.newInstance();
} catch (Exception e) {
@ -50,9 +50,9 @@ class PageModelExtractor {
field.setAccessible(true);
ExtractBy extractBy = field.getAnnotation(ExtractBy.class);
if (extractBy != null) {
if (!extractBy.multi() && !field.getType().isAssignableFrom(String.class)) {
if (!extractBy.multi() && !String.class.isAssignableFrom(field.getType())) {
throw new IllegalStateException("Field " + field.getName() + " must be string");
} else if (extractBy.multi() && !field.getType().isAssignableFrom(List.class)) {
} else if (extractBy.multi() && !List.class.isAssignableFrom(field.getType())) {
throw new IllegalStateException("Field " + field.getName() + " must be list");
}
String value = extractBy.value();
@ -82,9 +82,9 @@ class PageModelExtractor {
}
ExtractByUrl extractByUrl = field.getAnnotation(ExtractByUrl.class);
if (extractByUrl != null) {
if (!extractByUrl.multi() && !field.getType().isAssignableFrom(String.class)) {
if (!extractByUrl.multi() && !String.class.isAssignableFrom(field.getType())) {
throw new IllegalStateException("Field " + field.getName() + " must be string");
} else if (extractByUrl.multi() && !field.getType().isAssignableFrom(List.class)) {
} else if (extractByUrl.multi() && !List.class.isAssignableFrom(field.getType())) {
throw new IllegalStateException("Field " + field.getName() + " must be list");
}
String regexPattern = extractByUrl.value();

View File

@ -1,5 +1,7 @@
package us.codecraft.webmagic.oo;
import us.codecraft.webmagic.Page;
import java.util.List;
/**
@ -8,7 +10,7 @@ import java.util.List;
* Time: 10:18 <br>
*/
@TargetUrl("http://my.oschina.net/flashsword/blog/*")
public class OschinaBlog {
public class OschinaBlog implements AfterExtractor<OschinaBlog>{
@ExtractBy("//title")
private String title;
@ -19,4 +21,7 @@ public class OschinaBlog {
@ExtractBy(value = "//div[@class='BlogTags']/a/text()", multi = true)
private List<String> tags;
@Override
public void afterProcess(Page page, OschinaBlog oschinaBlog) {
}
}

View File

@ -1,8 +1,12 @@
package us.codecraft.webmagic.oo;
import org.junit.Ignore;
import org.junit.Test;
import us.codecraft.webmagic.Site;
import java.util.ArrayList;
import java.util.List;
/**
* @author yihua.huang@dianping.com <br>
* @date: 13-8-1 <br>
@ -10,12 +14,15 @@ import us.codecraft.webmagic.Site;
*/
public class TestFetcher {
// @Ignore("takes long")
@Ignore("takes long")
@Test
public void test() {
System.out.println(List.class.isAssignableFrom(ArrayList.class));
OOSpider.create(Site.me().addStartUrl("http://my.oschina.net/flashsword/blog/145796"), OschinaBlog.class)
.run();
}
}