2016-12-06 3 views
0

Hier ist der Code:Jena model.setNsPrefixes durch 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(); 
    }* 

Es wirft immer einen java.lang.NullPointerException, wenn es die Linie der model.setNsPrefixes() führt, und das Detail print finden als:

java.lang.NullPointerException bei org.apache.jena.tdb.store.DatasetPrefixesTDB.readPrefix (DatasetPrefixesTDB.java:86) bei org.apache.jena.sparql.graph.GraphPrefixesProjection .get (GraphPrefixesProjection.java:101) bei org.apache.jena.sparql.graph.GraphPrefixesProjection.set (GraphPrefixesProjection.java:79) bei org.apache.jena.shared.impl.PrefixMappingImpl.setNsPrefix (PrefixMappingImpl.java:75) bei org.apache. jena.shared.impl.PrefixMappingImpl.setNsPrefixes (PrefixMappingImpl.java:163) bei org.apache.jena.rdf.model.impl.ModelCom.setNsPrefixes (ModelCom.java:1043) bei ReadTransaction. (ReadTransaction.java:32) bei ReadTransaction.main (ReadTransaction.java:133)

I jena API überprüft haben, und ich konnte keine Lösung nicht finden.

Danke für jede Antwort!

+1

Mit Version Apache Jena 3.1.1, bekomme ich "org.apache.jena.tdb.TDBException: Allocation Versuch auf NodeTableReadonly", die korrekt ist. Der obige Code hat "Dataset.begin (ReadWrite.READ)". Es wurde der Punkt im Stacktrace übergeben. – AndyS

+1

Andere mögliche Ursachen sind die nicht-transaktionale Verwendung zu einem früheren Zeitpunkt (ein anderer JVM-Lauf) mit einem unsauberen Herunterfahren oder zwei Prozessen, die auf die gleichen Dateien zugreifen. – AndyS

+0

@AndyS vielen Dank für deine Kommentare, es geht tatsächlich um das unsaubere Ende einer Transaktion, ich habe die Datendateien erneut generiert, und die Ausnahme trat nicht mehr auf. – Tahirih

Antwort

2

Der folgende Code für mich gearbeitet:

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(); 
    } 

Der Schlüssel ist die Transaktionsart von READ zu WRITE zu ändern. Sie versuchen, Daten zu schreiben, also müssen Sie in einer Schreibtransaktion sein!