2016-12-06 20 views
0

下面是代碼:耶拿model.setNsPrefixes通過顯示java.lang.NullPointerException

*Location location = Location.create("target/DBLP"); 
    Dataset dataset = TDBFactory.createDataset(location); 
    dataset.begin(ReadWrite.READ); 
    Model model = dataset.getDefaultModel(); 
    HashMap<String, String> prifixMap = new HashMap<>(); 
    prifixMap.put("rdf","<http://www.w3.org/1999/02/22-rdf-syntax-ns#>"); 
    try{ 
     model.setNsPrefixes(prifixMap); 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    }* 

它始終引發一個顯示java.lang.NullPointerException當它執行model.setNsPrefixes()的線,並且所述細節的printStackTrace是如下:在org.apache.jena.tdb.store.DatasetPrefixesTDB.readPrefix(DatasetPrefixesTDB.java:86)

顯示java.lang.NullPointerException 在org.apache.jena.sparql.graph.GraphPrefixesProjection .get(GraphPrefixesProjection.java:101) at org.apache.jena.sparql.graph.GraphPrefixesProjection.set(GraphPrefixesProjection.java:79) at org.apache.jena.shared.impl.PrefixMappingImpl.setNsPrefix(PrefixMappingImpl.java:75) at org.apache。 jena.shared.impl.PrefixMappingImpl.setNsPrefixes(PrefixMappingImpl.java:163) 在org.apache.jena.rdf.model.impl.ModelCom.setNsPrefixes(ModelCom.java:1043) 在ReadTransaction。(ReadTransaction.java:32 ) 在ReadTransaction.main(ReadTransaction.java:133)

我已經檢查耶拿API,我找不到任何解決辦法。

感謝您的任何答案!

+1

隨着版本Apache Jena 3.1.1,我得到「org.apache.jena.tdb.TDBException:在NodeTableReadonly上的分配嘗試」,這是正確的。上面的代碼有「dataset.begin(ReadWrite.READ)」。它通過了堆棧跟蹤中的點。 – AndyS

+1

其他可能的原因是在過去的某個時間(另一個JVM運行)非關閉或兩個進程訪問相同文件的非事務性使用。 – AndyS

+0

@AndyS非常感謝您的評論,這確實是關於交易不清的結束,我再次生成數據文件,並且異常不再發生。 – Tahirih

回答

2

下面的代碼爲我工作:

Location location = Location.create("target/DBLP"); 
    Dataset dataset = TDBFactory.createDataset(location); 
    dataset.begin(ReadWrite.WRITE); // changed from READ to WRITE 
    Model model = dataset.getDefaultModel(); 
    HashMap<String, String> prefixMap = new HashMap<>(); 
    prefixMap.put("rdf", "http://www.w3.org/1999/02/22-rdf-syntax-ns#"); // removed '<' and '>' 
    try { 
     model.setNsPrefixes(prefixMap); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

的關鍵是交易類型改變從READWRITE。您正在嘗試寫入數據,因此您必須處於寫入事務中!