当前位置: 首页 > 知识库问答 >
问题:

Jersey+OWL API 3

谭炎彬
2023-03-14

大家早上好。

OWLOntologyManager manager OWLManager.createOWLOntologyManager = ();
javax.servlet.ServletException: java.lang.NoClassDefFoundError: Could not initialize class org.semanticweb.owlapi.apibinding.OWLManager
com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:420)
com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:558)
com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:733)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

我的web.xml:

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    id="WebApp_ID" version="3.0">
    <display-name>SemanticMDX</display-name>
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
    </welcome-file-list>
    <servlet>
        <servlet-name>Jersey Web Application</servlet-name>
        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Jersey Web Application</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
</web-app>

我的服务:

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;

@Path("/semantichelper")
public class WS_SemanticMDX {
    @GET
    @Produces("application/xml")
    public String convertCtoF() {
        AssistenteSemantico moduloSemantico = new AssistenteSemantico();
        moduloSemantico.loadOWLOntology();

    return "";
    }
}

加载本体的方法:

public class AssistenteSemantico {
public static final IRI iri = IRI.create(
        "myIRI/NovaOntologiaDeFeriados.owl");

public OWLOntology loadOwlOntology(){
    OWLOntology owlOntologyRedirect = null;
    OWLOntologyManager manager = OWLManager.createOWLOntologyManager(); 

    manager.addIRIMapper(new SimpleIRIMapper(
            iri,
            IRI.create(new File(myPath/OntologiaDeFeriados-v4.owl"))));
    try {
        owlOntologyRedirect = manager.loadOntology(iri);
    } catch (OWLOntologyCreationException e) {
        e.printStackTrace();
    }

    return owlOntologyRedirect;
}
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>SemanticMDX</groupId>
<artifactId>SemanticMDX</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.3</version>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
            </configuration>
        </plugin>
        <plugin>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.6</version>
            <configuration>
                <warSourceDirectory>WebContent</warSourceDirectory>
                <failOnMissingWebXml>false</failOnMissingWebXml>
            </configuration>
        </plugin>
    </plugins>
</build>
<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>3.8.1</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>net.sourceforge.owlapi</groupId>
        <artifactId>owlapi-distribution</artifactId>
        <version>3.5.2</version>
    </dependency>
    <dependency>
        <groupId>com.github.ansell.pellet</groupId>
        <artifactId>pellet-owlapiv3</artifactId>
        <version>2.3.3</version>
    </dependency>

    <dependency>
        <groupId>asm</groupId>
        <artifactId>asm</artifactId>
        <version>3.3.1</version>
    </dependency>
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-bundle</artifactId>
        <version>1.19</version>
    </dependency>
    <dependency>
        <groupId>org.json</groupId>
        <artifactId>json</artifactId>
        <version>20140107</version>
    </dependency>
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-server</artifactId>
        <version>1.19</version>
    </dependency>
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-core</artifactId>
        <version>1.19</version>
    </dependency>
</dependencies>
com.google.inject.CreationException: Unable to create injector, see the following errors:

共有1个答案

苏翰学
2023-03-14

您的pom文件看起来是正确的,但是这个错误似乎表明您的web应用程序中没有正确地包含OWLAPI JAR。检查WEB-INF/lib的内容,owlapi-distributionjar应该在那里。

编辑:新的错误不会在OWLAPI3中发生--它引用的代码只有在OWLAPI4中才可用。我相信您现在的类路径中有多个版本。

 类似资料:
  • 本文向大家介绍jersey Java Jersey配置,包括了jersey Java Jersey配置的使用技巧和注意事项,需要的朋友参考一下 示例 此示例说明了如何配置Jersey,以便您可以开始将其用作RESTful API的JAX-RS实现框架。 假设您已经安装了Apache Maven,请按照以下步骤设置Jersey: 创建Maven Web项目结构,在终端(Windows)中执行以下命令

  • Jersey是一个 REST 框架,提供 JAX-RS 参考实现等。Jersey 提供了自己的 API,这些 API 扩展了 JAX-RS 工具箱,并具有其他功能和实用程序,以进一步简化 RESTful 服务和客户端开发。Jersey还公开了许多扩展SPI,以便开发人员可以扩展泽西岛以最适合他们的需求。 目标可以归纳为以下几点: 跟踪JAX-RS API并定期提供GlassFish附带的生产质量参

  • 文件web.xml: 类JerseyGuiceServletContextListener: 类JerseyServletModuleConfig: 2016年8月21日12:34:12.577严重[localhost-startStop-1]org.apache.catalina.core.standardcontext.filterStart异常启动过滤器guiceFilter java.la

  • 问题内容: 我已经编写了自己的扫描器来浏览我的JAX-RS资源,并使用来打印出方法名称和路径。问题是,当我将相同的代码迁移到2.16(将包名称从更改为)时,它将无法正常工作。 深入研究发现,这些必修课程不再公开。有人知道原因吗?以及如何将下面的代码从1.x迁移到2.x?实际上,没有有关此迁移的文档。 所有帮助表示赞赏!下面是带有1.x的代码 问题答案: 可以在包中找到适用于Jersey 2.x的新

  • 问题内容: 这里有两个似乎相互矛盾的链接。我会尽快信任这些文档: 链接1 默认情况下,服务器上的请求处理在同步处理模式下工作 连结2 它已经是多线程的。 我的问题: 哪个是正确的。可以同时使用多线程吗? 为什么文档说以下内容?: 如果已知资源方法执行需要很长时间才能计算结果,则应使用服务器端异步处理模型 如果文档正确,为什么默认操作是同步的?默认情况下,为了用户体验,所有请求在客户端javascr

  • 问题内容: 该应用程序使用JDK 8,Spring Boot和Spring Boot Jersey启动程序,并打包为WAR(尽管它是通过Spring Boot Maven插件在本地运行的)。 我想做的是将我在运行中(在构建时)生成的文档作为欢迎页面。 我尝试了几种方法: 通过按照此处所述配置 适当的init参数,让Jersey提供静态内容 引入以便将生成的HTML文档作为欢迎文件列出。 这些都没有