i trying execute sparql queries jersey client problem execution returns 200 status , result null.but , when execute same query on postman status 200 result not null.
the code java client :
package org.jaba.messenger.messenger.client; import org.apache.commons.codec.encoderexception; import org.apache.commons.codec.net.urlcodec; import java.net.uri; import javax.ws.rs.client.client; import javax.ws.rs.client.clientbuilder; import javax.ws.rs.client.invocation; import javax.ws.rs.client.webtarget; import javax.ws.rs.core.mediatype; import javax.ws.rs.core.response; import javax.ws.rs.core.uribuilder; import org.glassfish.jersey.client.authentication.httpauthenticationfeature; import org.w3c.dom.document; public class restapiclient { public static void main(string args[]) { client client=clientbuilder.newclient(); //sb simple query httpauthenticationfeature feature = httpauthenticationfeature.basic("admin", "123123"); client.register(feature); string query=new string("select * { ?a ?b ?c }") ; urlcodec uc = new urlcodec(); string sparqlqueryuri = null; try { sparqlqueryuri=uc.encode(query); system.out.println("simplejerseyclient(): uri = " + sparqlqueryuri); }catch (encoderexception e) { system.err.println(e.tostring()); e.printstacktrace(); } webtarget target=client.target("http://localhost:8080/qodisco/api/sync-search") .queryparam("query",sparqlqueryuri); invocation.builder invocationbuilder =target.request(); response response = invocationbuilder.get(); ; system.out.println(response.getstatus()); system.out.println(response.readentity(string.class)); } }
that code of api connecting it:
package br.ufrn.dimap.consiste.qodisco.api; import java.text.dateformat; import java.text.simpledateformat; import java.util.date; import java.util.list; import javax.servlet.http.httpservletresponse; import org.springframework.beans.factory.annotation.autowired; import org.springframework.http.httpstatus; import org.springframework.http.responseentity; import org.springframework.security.core.authentication; import org.springframework.security.core.context.securitycontextholder; import org.springframework.web.bind.annotation.requestbody; import org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.bind.annotation.requestmethod; import org.springframework.web.bind.annotation.requestparam; import org.springframework.web.bind.annotation.responsebody; import org.springframework.web.bind.annotation.restcontroller; import br.ufrn.dimap.consiste.qodisco.model.entities.domain; import br.ufrn.dimap.consiste.qodisco.model.entities.user; import br.ufrn.dimap.consiste.qodisco.model.enums.topictype; import br.ufrn.dimap.consiste.qodisco.services.apiservice; import br.ufrn.dimap.consiste.qodisco.services.fusekiservice; @restcontroller @requestmapping("/api") public class qodiscoapi { @autowired private apiservice apiservice; @autowired private fusekiservice fusekiservice; @requestmapping(value="/user", method=requestmethod.post) public responseentity<string> adduser(@requestbody user user){ if(!apiservice.adduser(user)){ return new responseentity<string>(httpstatus.conflict); } return new responseentity<string>(httpstatus.created); } @requestmapping(value="/sync-search", method=requestmethod.get, produces="text/json") //@requestparam("domain") string domain, public string syncsearch( @requestparam("query") string query){ return apiservice.searchbyquery("pollution", query); } @requestmapping(value="/async-search", method=requestmethod.get, produces="text/json") public @responsebody string asyncsearch(@requestparam("query") string query, @requestparam("domain") string domain, @requestparam("type") int type){ authentication auth = securitycontextholder.getcontext().getauthentication(); dateformat dateformat = new simpledateformat("yyyy/mm/dd-hh:mm:ss.sss"); date date = new date(); string topicname = "qodisco"+auth.getname()+dateformat.format(date); topictype topictype; switch(type){ case 1: topictype = topictype.tipo1; break; case 2: topictype = topictype.tipo2; break; case 3: topictype = topictype.tipo3; break; default: topictype = null; break; } if(topictype!=null){ fusekiservice.asyncsearch(query, topicname, domain, topictype); return topicname; } else{ return null; } } @requestmapping(value="/resource", method=requestmethod.post) public responseentity<string> addresource(@requestparam("domain") string domain, @requestparam("data") string data){ apiservice.createorupdateresource(domain, data); return new responseentity<string>(httpstatus.created); } @requestmapping(value="/resource", method=requestmethod.put) public responseentity<string> updateresource(@requestparam("domain") string domain, @requestparam("data") string data){ apiservice.createorupdateresource(domain, data); return new responseentity<string>(httpstatus.ok); } @requestmapping(value="/resource", method=requestmethod.delete) public responseentity<string> removeresource(@requestparam("domain") string domain, @requestparam("data") string data){ apiservice.createorupdateresource(domain, data); return new responseentity<string>(httpstatus.ok); } @requestmapping(value="/repository", method=requestmethod.post) public responseentity<string> addrepository(@requestparam("domains") list<string> domainnames, @requestparam("url") string repositoryurl, @requestparam("operations") list<string> operations){ if(apiservice.addrepository(domainnames, repositoryurl, operations)){ return new responseentity<string>(httpstatus.ok); } else{ return new responseentity<string>(httpstatus.conflict); } } @requestmapping(value="/repository", method=requestmethod.delete) public responseentity<string> removerepository(@requestparam("url") string url){ if(apiservice.removerepository(url)){ return new responseentity<string>(httpstatus.ok); } else{ return new responseentity<string>(httpstatus.conflict); } } @requestmapping(value="/rdo", method=requestmethod.get, produces="text/json") public list<domain> getrdos(httpservletresponse response){ return apiservice.getdomains(); } @requestmapping(value="/rdo", method=requestmethod.post) public responseentity<string> addrdo(@requestbody domain domain){ system.out.println(domain); if(apiservice.addrdo(domain)){ return new responseentity<string>(httpstatus.ok); }else{ return new responseentity<string>(httpstatus.conflict); } } @requestmapping(value="/rdo", method=requestmethod.delete) public responseentity<string> removerdo(@requestparam("name") string name){ if(apiservice.removedomain(name)){ return new responseentity<string>(httpstatus.ok); } else{ return new responseentity<string>(httpstatus.conflict); } } @requestmapping(value="/rdo", method=requestmethod.put) public responseentity<string> updaterdo(@requestbody domain domain){ if(apiservice.addrdo(domain)){ return new responseentity<string>(httpstatus.ok); }else{ return new responseentity<string>(httpstatus.conflict); } } }
that result of running client :
simplejerseyclient(): uri = select+*+where+%7b+%3fa+%3fb++%7d 200 org.glassfish.jersey.client.internal.httpurlconnector$2@cd3fee8 null
thanks
this caused parsing error on side of endpoint. i've found fuseki
(is underlying triple store?) requires spaces encoded %20
rather +
. however, managed run +
encoded queries browser fine. perhaps replacing +
%20
in encoded query string resolve issue. otherwise, hope finds useful.
sparqlqueryuri = uc.encode(query).replaceall("\\+", "%20");
Comments
Post a Comment