本文介绍了Jena Sparql错误java.lang.Integer的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下代码:

    RestClient client = new RestClient("http://localhost:8080/scheduler.core/rest/services/discoverSensors");

    client.AddParam("userID", "[email protected]");
    client.AddParam("longitude", "4.3512725830078125");
    client.AddParam("latitude", "50.84761359783461");
    client.AddParam("radius", "15.0");
    client.AddHeader("accept", "application/xml");

    try {
        client.Execute(RestClient.RequestMethod.GET);
    } catch (Exception e) {
        e.printStackTrace();
    }

    String response = client.getResponse();
    //System.out.println(response);

    DocumentBuilder db = null;
    try {
        db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
    } catch (ParserConfigurationException e) {
        // TODO Auto-generated catch block

        System.out.println("error");
    }

    InputSource is = new InputSource();
    is.setCharacterStream(new StringReader(response));

    Document doc = db.parse(is);
    NodeList nodes = doc.getElementsByTagName("SensorType");

    // Getting the id of the sensor
    for(int x=0,size= nodes.getLength(); x<size; x++) {

        String resourceID = nodes.item(x).getAttributes().getNamedItem("id").getNodeValue();

        String sparqlQueryString = "select ?sensor ?lat ?lng "+
                                   "from <http://lsm.deri.ie/OpenIoT/demo/sensormeta#> " +
                                   "where{?sensor <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://purl.oclc.org/NET/ssnx/ssn#Sensor>."+
                                   "?sensor <http://lsm.deri.ie/ont/lsm.owl#hasSensorType> <http://lsm.deri.ie/resource/8a8291b73215690e013215a4c0d00f17>."+
                                   "?sensor <http://www.loa-cnr.it/ontologies/DUL.owl#hasLocation> ?location."+
                                   "?location <http://www.w3.org/2003/01/geo/wgs84_pos#lat> ?lat."+
                                   "?location <http://www.w3.org/2003/01/geo/wgs84_pos#long> ?lng."+
                                   "}limit 100";

        System.out.println(resourceID);
        System.out.println(sparqlQueryString);

        Query query = QueryFactory.create(sparqlQueryString);
        ARQ.getContext().setTrue(ARQ.useSAX);

        System.out.println("1");
        QueryExecution qexec = QueryExecutionFactory.sparqlService("http://lsm.deri.ie/sparql", query);
        System.out.println("2");

        //Retrieving the SPARQL Query results
        ResultSet results = qexec.execSelect();
        System.out.println("3");

        //Iterating over the SPARQL Query results
        while (results.hasNext()) {
             QuerySolution soln = results.nextSolution();

             System.out.println("4");
             String SensorID = soln.get("?sensor").toString();
             String lat = soln.get("?lat").toString();
             String lon = soln.get("?lng").toString();

             System.out.println(SensorID);
             System.out.println(lat);
             System.out.println(lon);
        }

        qexec.close();
    }
}

我面临的问题是,当我执行查询时,正在显示错误.程序终止的行是2到3之间的行.显示的错误是:

The Problem I am facing is that when I am executing the query, an error is being displayed. The line where the program terminates is the line between 2 and 3. The error displayed is:

Exception in thread "main" java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer
    at org.apache.http.params.AbstractHttpParams.getIntParameter(AbstractHttpParams.java:70)
    at org.apache.http.client.params.HttpClientParamConfig.getRequestConfig(HttpClientParamConfig.java:54)
    at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:806)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:72)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:57)
    at org.apache.http.impl.client.DecompressingHttpClient.execute(DecompressingHttpClient.java:158)
    at org.apache.http.impl.client.DecompressingHttpClient.execute(DecompressingHttpClient.java:139)
    at org.apache.jena.riot.web.HttpOp.exec(HttpOp.java:1011)
    at org.apache.jena.riot.web.HttpOp.execHttpGet(HttpOp.java:291)
    at org.apache.jena.riot.web.HttpOp.execHttpGet(HttpOp.java:353)
    at com.hp.hpl.jena.sparql.engine.http.HttpQuery.execGet(HttpQuery.java:326)
    at com.hp.hpl.jena.sparql.engine.http.HttpQuery.exec(HttpQuery.java:276)
    at com.hp.hpl.jena.sparql.engine.http.QueryEngineHTTP.execSelect(QueryEngineHTTP.java:346)
    at ExecuteRestClient.main(ExecuteRestClient.java:114)

这是因为纬度和经度变量吗?我正在使用耶拿2.11.

Is this because the latitude and longitude variable? I am using jena 2.11.

推荐答案

@ZaoTaoBao在评论中指出的内容很可能是您问题的根源- https://github.com/pyvandenbussche/sparqles/issues/9

What @ZaoTaoBao points to in the comments is likely the source of your problem - https://github.com/pyvandenbussche/sparqles/issues/9

ARQ当前未使用最新版本的Apache HTTP Client,但您的应用程序/类路径中有某些内容,因此正在加载错误的类(从ARQ的角度来看).因此,当ARQ尝试使用HttpClient API时,它预期最终会调用不再具有相同类型签名的新API中的方法,并且得到ClassCastException

ARQ is not currently using the very latest version of Apache HTTP Client but something in your application/classpath is so the wrong class (from ARQ's point of view) is getting loaded. So when ARQ tries to use the HttpClient API it expects it ends up calling the methods in the new API which no longer have the same type signature and you get the ClassCastException

因此,这归结为Java/app特定的环境问题.

So this boils down to a Java/app specific environment problem.

您需要检查您的类路径和/或依赖项层次结构,以了解其他使用Apache HttpClient的问题,并通过不使用比ARQ使用的版本新的版本来解决版本冲突.

You need to review your class path and/or dependency hierarchy to figure out what else is using Apache HttpClient and resolve the version conflict by not using a version newer than ARQ uses.

mvn dependency:tree是您的朋友,可以在maven项目中进行调查,然后可以使用依赖项排除功能删除较新的版本.否则,您将需要使用IDE或构建系统提供的任何依赖项/类路径管理支持来对此进行调查.

mvn dependency:tree is your friend for investigating this on maven projects and then you can use dependency exclusions to remove the newer version. Otherwise you'll need to use whatever dependency/class path management support your IDE or build system provides to investigate this.

但是,如果您要混合使用需要多个版本的HttpClient的库,那么这样做只会破坏其他东西.

However if you are mixing libraries that need multiple versions of HttpClient then doing so is only going to break something else.

这篇关于Jena Sparql错误java.lang.Integer的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-05 19:48