예제 #1
0
 public void publishNanopub(Nanopub nanopub) throws IOException {
   if (serverInfo == null) {
     if (serverUrls == null || serverUrls.isEmpty()) {
       serverIterator = new ServerIterator();
     } else {
       serverIterator = new ServerIterator(serverUrls);
     }
     serverInfo = serverIterator.next();
   }
   artifactCode = TrustyUriUtils.getArtifactCode(nanopub.getUri().toString());
   if (verbose) {
     System.out.println("---");
     System.out.println("Trying to publish nanopub: " + artifactCode);
   }
   while (serverInfo != null) {
     String serverUrl = serverInfo.getPublicUrl();
     try {
       if (!ServerInfo.load(serverUrl).isPostNanopubsEnabled()) {
         serverInfo = serverIterator.next();
         continue;
       }
     } catch (ServerInfoException ex) {
       serverInfo = serverIterator.next();
       continue;
     }
     if (verbose) {
       System.out.println("Trying server: " + serverUrl);
     }
     try {
       HttpPost post = new HttpPost(serverUrl);
       String nanopubString = NanopubUtils.writeToString(nanopub, RDFFormat.TRIG);
       post.setEntity(new StringEntity(nanopubString, "UTF-8"));
       post.setHeader("Content-Type", RDFFormat.TRIG.getDefaultMIMEType());
       HttpResponse response = HttpClientBuilder.create().build().execute(post);
       int code = response.getStatusLine().getStatusCode();
       if (code >= 200 && code < 300) {
         if (usedServers.containsKey(serverUrl)) {
           usedServers.put(serverUrl, usedServers.get(serverUrl) + 1);
         } else {
           usedServers.put(serverUrl, 1);
         }
         if (verbose) {
           System.out.println("Published: " + artifactCode);
         }
         return;
       } else {
         if (verbose) {
           System.out.println(
               "Response: " + code + " " + response.getStatusLine().getReasonPhrase());
         }
       }
     } catch (IOException ex) {
       if (verbose) {
         System.out.println(ex.getClass().getName() + ": " + ex.getMessage());
       }
     } catch (OpenRDFException ex) {
       if (verbose) {
         System.out.println(ex.getClass().getName() + ": " + ex.getMessage());
       }
     }
     serverInfo = serverIterator.next();
   }
   serverInfo = null;
   throw new IOException("Failed to publish the nanopub");
 }