java - Error jersey Rest client using sparql queries -


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