【问题标题】:RDF4J: "Failed to get server protocol" error on EC2 but not locallyRDF4J:EC2 上的“无法获取服务器协议”错误,但不是本地错误
【发布时间】:2019-09-02 02:12:23
【问题描述】:

在 EC2 服务器上使用 RDF4J 从 Java 运行查询时出现以下错误(在本地运行良好)。

java_1        | 30-Aug-2019 13:51:50.511 SEVERE [http-nio-8080-exec-1] com.sun.jersey.spi.container.ContainerResponse.mapMappableContainerException The RuntimeException could not be mapped to a response, re-throwing to the HTTP container
java_1        | org.eclipse.rdf4j.repository.http.HTTPQueryEvaluationException: Failed to get server protocol; no such resource on this server: http://127.0.0.1:8080/openrdf-sesame/protocol
java_1        | at org.eclipse.rdf4j.repository.http.HTTPTupleQuery.evaluate(HTTPTupleQuery.java:56)

相关Java代码:

import org.eclipse.rdf4j.model.Value;
import org.eclipse.rdf4j.query.BindingSet;
import org.eclipse.rdf4j.query.QueryLanguage;
import org.eclipse.rdf4j.query.TupleQuery;
import org.eclipse.rdf4j.query.TupleQueryResult;
import org.eclipse.rdf4j.RDF4JException;
import org.eclipse.rdf4j.repository.Repository;
import org.eclipse.rdf4j.repository.RepositoryConnection;
import org.eclipse.rdf4j.repository.http.HTTPRepository;

public void test() throws RDF4JException
{
    String sesameServer ="http://127.0.0.1:8080/rdf4j-server";
    HTTPRepository db = new HTTPRepository(sesameServer, repositoryID);
    db.initialize();
    try (RepositoryConnection conn = db.getConnection()) {
        TupleQuery tupleQuery = conn.prepareTupleQuery(QueryLanguage.SPARQL, queryString);
    }
    catch(RDF4JException e) {
        System.out.println(e.getMessage());
    }
    finally {
        db.shutDown();
    }
}

我尝试将sesameServer 中的 IP 更改为服务器的公共 IP,并引发相同的错误。无论如何,它与 RDF 数据库在同一台服务器 (Tomcat 8) 上运行,因此 127.0.0.1 应该可以工作(并且可以在本地工作)。

非常感谢任何帮助/想法。

【问题讨论】:

  • 您的代码中的服务器 URL 是 http://127.0.0.1:8080/rdf4j-server,但错误消息中提到的那个是 http://127.0.0.1:8080/openrdf-sesame(这是 Sesame 将自身重命名为 rdf4j 之前的 URL)。假设您实际上运行的是 Rdf4j Server 而不是 Sesame,那么代码中的 url 应该是正确的。我会仔细检查您实际执行的代码是否正确设置了此 url。
  • @Jeen Broekstra 谢谢。我们用 sesame 重新启动了该项目,但不久前将其迁移。原来有一个java类文件在部署在ec2上时没有在Docker中重建,它保存了服务器地址。

标签: java sesame rdf4j


【解决方案1】:

感谢 Jeen Broekstra 的帮助。将服务器 url 作为变量保存的 Java 常量文件并未在 Docker/EC2 上构建,因此使用了旧版本的 java 类文件(仍指向 sesame)。重建它修复了一切。

【讨论】:

    猜你喜欢
    • 2019-04-11
    • 2017-07-02
    • 1970-01-01
    • 2014-10-06
    • 1970-01-01
    • 1970-01-01
    • 2017-11-06
    • 2011-01-29
    • 2020-08-11
    相关资源
    最近更新 更多