如何解决此错误:java.lang.NoSuchFieldError:UTF_32BE?

如何解决此错误:java.lang.NoSuchFieldError:UTF_32BE?,java,owl,ontology,owl-api,Java,Owl,Ontology,Owl Api,我正在使用OWLAPI读取一个本体文件。我的代码如下: OWLOntologyManager manager = OWLManager.createOWLOntologyManager(); IRI iri = IRI.create(new File("src\\main\\webapp\\resources\\inputfile\\20171218 ontology test v0.6.owl")); System.out.println(iri); //I am getting error

我正在使用OWLAPI读取一个本体文件。我的代码如下:

OWLOntologyManager manager = OWLManager.createOWLOntologyManager();
IRI iri = IRI.create(new File("src\\main\\webapp\\resources\\inputfile\\20171218 ontology test v0.6.owl"));
System.out.println(iri);
//I am getting error in below line
OWLOntology moduleOWL = manager.loadOntologyFromOntologyDocument(iri);
我得到以下例外情况。我已经想尽一切办法来解决这个问题,但没有成功

file:/D:/Company/Workspace/My%20Data/MyDATA/src/main/webapp/resources/inputfile/20171218%20ontology%20test%20v0.6.owl

Exception in thread "main" java.lang.NoSuchFieldError: UTF_32BE
    at org.semanticweb.owlapi.io.DocumentSources.wrap(DocumentSources.java:248)
    at org.semanticweb.owlapi.io.DocumentSources.getInputStreamFromContentEncoding(DocumentSources.java:284)
    at org.semanticweb.owlapi.io.DocumentSources.connectWithFiveRetries(DocumentSources.java:227)
    at org.semanticweb.owlapi.io.DocumentSources.getInputStream(DocumentSources.java:150)
    at org.semanticweb.owlapi.io.DocumentSources.wrapInput(DocumentSources.java:115)
    at org.semanticweb.owlapi.io.DocumentSources.wrapInputAsReader(DocumentSources.java:79)
    at org.semanticweb.owlapi.io.DocumentSources.wrapInputAsReader(DocumentSources.java:96)
    at org.semanticweb.owlapi.io.AbstractOWLParser.getInputSource(AbstractOWLParser.java:38)
    at org.semanticweb.owlapi.rdf.rdfxml.parser.RDFXMLParser.parse(RDFXMLParser.java:59)
    at uk.ac.manchester.cs.owl.owlapi.OWLOntologyFactoryImpl.loadOWLOntology(OWLOntologyFactoryImpl.java:188)
    at uk.ac.manchester.cs.owl.owlapi.OWLOntologyManagerImpl.load(OWLOntologyManagerImpl.java:1072)
    at uk.ac.manchester.cs.owl.owlapi.OWLOntologyManagerImpl.loadOntology(OWLOntologyManagerImpl.java:1033)
    at uk.ac.manchester.cs.owl.owlapi.OWLOntologyManagerImpl.loadOntologyFromOntologyDocument(OWLOntologyManagerImpl.java:973)
    at com.ifour.mydata.test.ConvertXMLtoRDF.getOwlProperty(ConvertXMLtoRDF.java:402)
    at com.ifour.mydata.test.ConvertXMLtoRDF.main(ConvertXMLtoRDF.java:114)

出现此问题的原因是类路径中存在与Owl API不兼容的Apache Commons IO版本。

我的计算方法如下

我读到了例外情况。它提到了
UTF\u 32BE
不是一个字段,并说问题发生在哪个类和方法中,所以我找到了Owl API的
DocumentSources.wrap()
方法:

public static InputStream wrap(InputStream delegate) {
    checkNotNull(delegate, "delegate cannot be null");
    return new BOMInputStream(delegate, ByteOrderMark.UTF_8, ByteOrderMark.UTF_16BE,
        ByteOrderMark.UTF_16LE, ByteOrderMark.UTF_32BE, ByteOrderMark.UTF_32LE);
}
它引用了
ByteOrderMark
上的各种
UTF.*
字段,但并非所有字段都失败。我发现
ByteOrderMark
是从Apache Commons IO导入的:

import org.apache.commons.io.ByteOrderMark;
如果查看
字节顺序标记
,它的字段定义如下:

/**
 * UTF-32BE BOM (Big-Endian)
 * @since 2.2
 */
public static final ByteOrderMark UTF_32BE = new ByteOrderMark("UTF-32BE", 0x00, 0x00, 0xFE, 0xFF);

这表明您的类路径上有一个早于2.2版本的Apache Commons IO。

它可能来自路径中的空白。不记得空白的替换字符是什么,但您可以尝试重命名并删除路径中的所有空白。例如,“我的数据”应该改为“我的数据”。谢谢@mBogaz的回复。我无法更改路径,因为我只能使用该路径,即使我尝试对路径进行编码,但未能解决我的错误。这不是文件名。问题是类路径上的Apache Commons IO的旧版本。我真的建议使用Maven之类的构建系统,Gradle等。我已经在使用maven@aksw感谢回复@aetheria。在我的另一个测试项目中,它应该可以正常工作。但是当我使用%数据路径时,它会给我一个错误。因此我认为这不是Apache Commons IO的问题。异常的原因是Apache Commons IO的旧版本(如果您按照我的解释进行操作,您可以看到). 您可能在文件名方面也有问题,但这些并不是您提到的异常的原因。同意。文件名很好。打开文件后会出现异常。谢谢,@aetheria you's right这是Apache Commons IO的问题我已将Apache Commons IO 2.6添加到我的依赖项中