2015-10-13 40 views
0

我已經使用了owl-api版本3.5,現在我想切換到版本4,但是我得到一個運行時異常。就像下面的示例代碼(它可以在3.5版本中正常工作)一樣,每次調用函數「manager.addAxiom(...)」時都會拋出java.lang.NoSuchMethodError。從owl-api 3.5切換到4.x時java.lang.NoSuchMethodError

WLOntologyManager manager = OWLManager.createOWLOntologyManager(); 
IRI ontologyIRI = IRI.create("http://example.com/owlapi/families"); 
OWLOntology ont = manager.createOntology(ontologyIRI);  
OWLDataFactory factory = manager.getOWLDataFactory(); 

OWLIndividual john = factory.getOWLNamedIndividual(IRI.create(ontologyIRI + "#John")); 
OWLIndividual mary = factory.getOWLNamedIndividual(IRI.create(ontologyIRI + "#Mary")); 
OWLObjectProperty hasWife = factory.getOWLObjectProperty(IRI.create(ontologyIRI + "#hasWife")); 
OWLObjectPropertyAssertionAxiom axiom1 = factory.getOWLObjectPropertyAssertionAxiom(hasWife, john, mary); 

manager.addAxiom(ont, axiom1); 
... 

其引發的整個exeption說:

Exception in thread "main" java.lang.NoSuchMethodError: org.semanticweb.owlapi.model.OWLOntologyManager.addAxiom(Lorg/semanticweb/owlapi/model/OWLOntology;Lorg/semanticweb/owlapi/model/OWLAxiom;)Lorg/semanticweb/owlapi/model/parameters/ChangeApplied; 
at de.ifak.Writer.OWL.Example.OWLMinimalTest.main(OWLMinimalTest.java:26) 

我測試過的代碼放在一個乾淨的Java項目,並添加了OWL-API的依賴手工,後來與行家。我用版本4.0.2和4.1.0-RC2進行了測試。兩者都表現出相同的行爲。

我找不到任何解決方案。所以我希望有人能幫助我。

感謝,

克里斯

回答

0

好吧,我自己找到了解決辦法。 如果我的代碼

manager.addAxiom(ont, axiom1); 

改變

Set<OWLAxiom> axiomsToAdd = new HashSet<OWLAxiom>(); 
axiomsToAdd.add(axiom1);   
manager.addAxioms(ont, axiomsToAdd); 

一切工作正常,甚至與OWL-API的4.1版本。

編輯: 好吧,我犯了一個錯誤。它工作正常4.0.2版本,但是4.1版本我得到當我打電話了同樣的異常:

manager.addAxioms(ont, axiomsToAdd); 

當我打電話這樣的:

manager.addAxiom(ont, axiom1); 
0

的addAxiom方法仍然存在,只是它的返回類型已經改變。你將賦值返回給變量嗎?

+0

不,我發現哪裏出了問題。我在類路徑中使用了owl-api的舊版本(v3.5和v4.0.2)。當我從classpath中刪除這個版本時,異常消失了。現在它也適用於owl-api的4.1版本。 – Chris