![](/img/trans.png)
[英]Validation error: “No validator could be found for type: java.lang.Integer”
[英]Jena Sparql Error java.lang.Integer
我有以下代码:
RestClient client = new RestClient("http://localhost:8080/scheduler.core/rest/services/discoverSensors");
client.AddParam("userID", "keith@acrosslimits.com");
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之间的行。显示的错误是:
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。
@ZaoTaoBao在评论中指出的可能是您问题的根源-https: //github.com/pyvandenbussche/sparqles/issues/9
ARQ当前未使用Apache HTTP Client的最新版本,但是您的应用程序/类路径中有某些内容,因此(从ARQ的角度来看)装入了错误的类。 因此,当ARQ尝试使用HttpClient API时,它期望最终会调用不再具有相同类型签名的新API中的方法,并且您会收到ClassCastException
因此,这归结为Java /应用程序特定的环境问题。
您需要检查您的类路径和/或依赖项层次结构,以了解使用Apache HttpClient的其他问题,并通过不使用比ARQ使用的版本新的版本来解决版本冲突。
mvn dependency:tree
是您在maven项目上进行调查的朋友,然后您可以使用依赖项排除来删除较新的版本。 否则,您将需要使用IDE或构建系统提供的任何依赖项/类路径管理支持来对此进行调查。
但是,如果您要混合使用需要多个版本的HttpClient的库,那么这样做只会破坏其他功能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.