Lire-0.9.4-beta1初始化DocumentBuilder出错

错误原因:0.9.4-beta1这个版本的net.semanticmetadata.lire.indexing.hashing包下缺少一个名为LshBitSampling.obj的文件


本人利用Maven导入Lire框架,可是Maven Repository中唯一的一个版本是0.9.4-kzwang-beta1(点击打开链接)

在做测试的时候报出了一个初始化错误:

Exception in thread "main" java.lang.ExceptionInInitializerError  
    at net.semanticmetadata.lire.DocumentBuilderFactory.getDefaultDocumentBuilder(DocumentBuilderFactory.java:67)  
  
Caused by: java.lang.NullPointerException  
    at java.util.zip.InflaterInputStream.<init>(Unknown Source)  
    at java.util.zip.GZIPInputStream.<init>(Unknown Source)  
    at java.util.zip.GZIPInputStream.<init>(Unknown Source)  
    at net.semanticmetadata.lire.indexing.hashing.BitSampling.readHashFunctions(BitSampling.java:148)  
    at net.semanticmetadata.lire.impl.GenericDocumentBuilder.<clinit>(GenericDocumentBuilder.java:89)  
    ... 2 more

错误显示DocumentBuilder工厂在初始化DocumentBuilder时出错

我从“at net.semanticmetadata.lire.impl.GenericDocumentBuilder.<clinit>(GenericDocumentBuilder.java:89)”这个地方开始一层层往上寻找错误

直到最后一层“at java.util.zip.InflaterInputStream.<init>(Unknown Source)”,我看了源码是这样的:

public InflaterInputStream(InputStream in, Inflater inf, int size) {  
        super(in);  
        if (in == null || inf == null) {  
            throw new NullPointerException();  
        } else if (size <= 0) {  
            throw new IllegalArgumentException("buffer size <= 0");  
        }  
        this.inf = inf;  
        buf = new byte[size];  
    }

从“if (in == null || inf == null) {
            throw new NullPointerException();
        }”这段代码可看出抛出空指针异常的原因是in或inf为空,但是inf在GZIPInputStream中通过new Inflater(true)创建,这个创建语句没有报错,说明inf不为空

所以抛出错误的原因就是in为空,这个in是在BitSampling.readHashFunctions方法中通过“BitSampling.class.getResourceAsStream(hashFunctionsFileName)”来创建的

hashFunctionsFileName的值为LshBitSampling.obj。



到这,我突然想到了点什么。(至于是什么我也不明白,反正我就很自然的做出下面的动作。。。。)

于是我就去找之前可以成功运行lire框架的项目,该项目的Lire框架版本为0.9.4-beta2。

我一层层打开,直到我打开net.semanticmetadata.lire.indexing.hashing包时,一切的错误都解决了,因为我新项目导入的0.9.4-beta1的

net.semanticmetadata.lire.indexing.hashing包下没有LshBitSampling.obj文件,而以前的项目中有此文件。


你可能感兴趣的:(LIRE)