Hi,

You need to add commons.logging to your project. I saw this error when
I tried to use rupdate from jena-arq, which also can be an exampe how
to write SPARQL update.

Hope it helps,

On Wed, Sep 19, 2012 at 3:17 PM, David Moss <[email protected]> wrote:
> I've been banging my head against the wall until the early hours trying to
> make Jena post an insert to a sparql endpoint.
> I notice there is no code on the net to use as a guide on this topic.
>
> Initially I thought my server wasn't responding to update requests, but I
> installed fuseki and set it it accept updates from the command line. Still
> no joy. I could send updates with fuseki's web form, but not from Java
> using Jena.
>
> The code I tried to use from Jena was:
>
>      String update = "http://localhost:3030/ds/update";;
>      String query = "INSERT {<a> <b> <c>} WHERE {?s ?p ?o}";
>      UpdateRequest u = UpdateFactory.create();
>      u.add(query);
>      UpdateProcessRemote p = new UpdateProcessRemote(u, update);
>      p.execute();
>
> No matter what I tried the code would fail deep in the processing of
> p.execute()
>
> I even tried writing my own html page with a form to send the query, just
> to prove it would be accepted and processed by fuseki.
> It was.
>
> The error dump from the above code is as follows:
>
> ******************
> 0 [AWT-EventQueue-0] INFO jenatest.jenathing  - creating jenathing
> Jenathing created
> 3382 [AWT-EventQueue-0] DEBUG com.hp.hpl.jena.sparql.mgt.
> ARQMgt  - Register MBean: com.hp.hpl.jena.sparql.system:type=Context
> 3382 [AWT-EventQueue-0] DEBUG com.hp.hpl.jena.sparql.mgt.ARQMgt  - Register
> MBean: com.hp.hpl.jena.sparql.system:type=Engine
> 3499 [AWT-EventQueue-0] DEBUG com.hp.hpl.jena.sparql.mgt.ARQMgt  - Register
> MBean: com.hp.hpl.jena.sparql.system:type=SystemInfo
> 3501 [AWT-EventQueue-0] DEBUG com.hp.hpl.jena.sparql.mgt.ARQMgt  - Register
> MBean: com.hp.hpl.jena.sparql.system:type=SystemInfo
> 3502 [AWT-EventQueue-0] DEBUG com.hp.hpl.jena.sparql.mgt.ARQMgt  - Register
> MBean: org.openjena.riot.system:type=SystemInfo
> 4018 [AWT-EventQueue-0] DEBUG org.openjena.riot.web.HttpOp  - [1] POST
> http://localhost:3030/ds/update
> Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError:
> org/apache/commons/logging/LogFactory
>         at
> org.apache.http.impl.client.AbstractHttpClient.<init>(AbstractHttpClient.java:182)
>         at
> org.apache.http.impl.client.DefaultHttpClient.<init>(DefaultHttpClient.java:150)
>         at org.openjena.riot.web.HttpOp.execHttpPost(HttpOp.java:206)
>         at org.openjena.riot.web.HttpOp.execHttpPost(HttpOp.java:154)
>         at org.openjena.riot.web.HttpOp.execHttpPost(HttpOp.java:128)
>         at
> com.hp.hpl.jena.sparql.modify.UpdateProcessRemote.execute(UpdateProcessRemote.java:60)
>         at jenatest.jenathing.doUpdate(jenathing.java:65)
> *************************
> and this seems to be the culprit:
> <init>(AbstractHttpClient.java:182)
>
> when it gets to line 206 in HttpOp.java
>
>             // Execute
>             HttpClient httpclient = new DefaultHttpClient();
>
> it hangs for a bit and then never actually executes the subsequent lines:
>
>             httppost.setEntity(provider) ;
>             HttpResponse response = httpclient.execute(httppost) ;
>             httpResponse(id, response, baseIRI, handlers) ;
>
>             httpclient.getConnectionManager().shutdown();
>
> it skips over these and
>         } catch (IOException ex)
>         {
>             ex.printStackTrace(System.err) ;
>         }
>
> straight to the finally clause:
>
>         finally { closeEntity(provider) ; }
>     }
>
> So it doesn't work and the problem seems to be deeply hidden within the
> Apache stuff.
>
> Eventually after staying up till past 3am and missing a days work today, I
> sidestepped the issue entirely and wrote (or rather cut-and-pasted) an
> update routine that ignored the Jena stuff altogether. Not my preferred
> option, but enough is enough.
>
> I replaced the code above with:
>
>         String update = "http://localhost:3030/ds/update";;
>         String query = "INSERT {<a> <b> <c>} WHERE {?s ?p ?o}";
>         postthing p = new postthing();
>         p.setEndpoint(update);
>         p.setUpdateString(query);
>         try {
>         p.execute();
>         }
>         catch (Exception e) {
>           logger.error(e.toString());
>         }
>
> where the postthing is defined as:
>
>
> ******************************
> package jenatest;
>
> import java.io.BufferedReader;
> import java.io.InputStreamReader;
> import java.io.OutputStreamWriter;
> import java.net.URL;
> import java.net.URLConnection;
> import java.net.URLEncoder;
>
> /**
>  *
>  * @author admos0
>  */
> public class postthing {
>
>     private String updateString = "";
>     private String endpoint = "";
>
>     postthing() {
>         // empty constructor
>     }
>
>     postthing(String input) {
>         this.updateString = input;
>     }
>
>         /**
>      * @param set the endpoint
>      */
>     public void setEndpoint(String endpoint) {
>         this.endpoint = endpoint;
>     }
>
>     /**
>      * @return the endpoint
>      */
>     public String getEndpoint() {
>         return this.endpoint;
>     }
>
>
>      /**
>      * @method  execute the update
>      */
>     void execute() throws Exception {
>         try {
>
>             if (this.endpoint.equals("")) throw new Exception("No endpoint
> specified");
>             if (this.updateString.equals("")) throw new Exception("no
> update string specified");
>
>
>             // Construct data
>             String data = URLEncoder.encode("request", "UTF-8") + "=" +
> URLEncoder.encode(this.getUpdateString(), "UTF-8");
>
>
>             // Send data
>             URL url = new URL(endpoint);
>
>             URLConnection conn = url.openConnection();
>             conn.setDoOutput(true);
>             OutputStreamWriter wr = new
> OutputStreamWriter(conn.getOutputStream());
>             wr.write(data);
>             wr.flush();
>
>             // Get the response
>             BufferedReader rd = new BufferedReader(new
> InputStreamReader(conn.getInputStream()));
>             String line;
>             while ((line = rd.readLine()) != null) {
>                 // Process line...
>             }
>             wr.close();
>             rd.close();
>         } catch (Exception e) { throw e;
>         }
>
>     }
>
>     /**
>      * @return the updateString
>      */
>     public String getUpdateString() {
>         return updateString;
>     }
>
>     /**
>      * @param updateString the updateString to set
>      */
>     public void setUpdateString(String updateString) {
>         this.updateString = updateString;
>     }
> }
> ***********************
>
> Now it works. I can insert triples into my sparql update endpoint.
>
> There has to be a deep bug in the Apache routines that come with Jena that
> thwarted my previous efforts and I hope someone notices this and fixes it.
>
> In the meantime I'm happy that I have something that works, and I hope that
> by posting here the recipe for updating a remote sparql endpoint will
> become available and more people will take up Jena and Fuseki.
>
> David Moss

Reply via email to