From 121dc8fdb9c742f81ae7fa3c43fc747e36e9d06e Mon Sep 17 00:00:00 2001 From: Gianpaolo Coro Date: Mon, 19 Oct 2015 08:38:54 +0000 Subject: [PATCH] git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/data-analysis/SeaDataNetConnector@119852 82a268e6-3cf1-43bd-a215-b396298e98cf --- .../seadatanet/DivaHTTPClient.java | 136 ++++++++++++------ 1 file changed, 91 insertions(+), 45 deletions(-) diff --git a/src/org/gcube/dataanalysis/seadatanet/DivaHTTPClient.java b/src/org/gcube/dataanalysis/seadatanet/DivaHTTPClient.java index 58a45a8..848d074 100644 --- a/src/org/gcube/dataanalysis/seadatanet/DivaHTTPClient.java +++ b/src/org/gcube/dataanalysis/seadatanet/DivaHTTPClient.java @@ -1,64 +1,115 @@ package org.gcube.dataanalysis.seadatanet; +import java.io.BufferedInputStream; +import java.io.BufferedReader; +import java.io.DataOutputStream; import java.io.File; +import java.io.FileReader; import java.io.IOException; -import java.util.Scanner; -import java.util.logging.Logger; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.StringReader; +import java.net.HttpURLConnection; +import java.net.URL; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; -import org.apache.http.HttpEntity; -import org.apache.http.client.ClientProtocolException; -import org.apache.http.client.methods.CloseableHttpResponse; -import org.apache.http.client.methods.HttpPost; -import org.apache.http.entity.mime.MultipartEntityBuilder; -import org.apache.http.entity.mime.content.FileBody; -import org.apache.http.impl.client.CloseableHttpClient; -import org.apache.http.impl.client.HttpClients; -import org.apache.http.util.EntityUtils; -import org.w3c.dom.*; +import org.gcube.contentmanagement.lexicalmatcher.utils.AnalysisLogger; +import org.w3c.dom.Document; +import org.w3c.dom.Node; import org.xml.sax.InputSource; import org.xml.sax.SAXException; - - -import java.io.*; public class DivaHTTPClient { public static String WEB_HTTP="http://gher-diva.phys.ulg.ac.be/web-vis/Python/web"; + public static String postFile(File file) throws Exception { + String crlf = "\r\n"; + String twoHyphens = "--"; + String boundary = "*****"; - public static DivaFilePostResponse uploadFile(File file) throws ClientProtocolException, IOException, ParserConfigurationException, SAXException + HttpURLConnection httpUrlConnection = null; + try { + + URL url = new URL(WEB_HTTP+"/upload"); + httpUrlConnection = (HttpURLConnection) url.openConnection(); + httpUrlConnection.setUseCaches(false); + httpUrlConnection.setDoOutput(true); + + httpUrlConnection.setRequestMethod("POST"); + httpUrlConnection.setRequestProperty("Connection", "Keep-Alive"); + httpUrlConnection.setRequestProperty("Cache-Control", "no-cache"); + + httpUrlConnection.setRequestProperty( + "Content-Type", "multipart/form-data;boundary=" + boundary); + + DataOutputStream request = new DataOutputStream( + httpUrlConnection.getOutputStream()); + + request.writeBytes("--" + boundary + crlf); + request.writeBytes("Content-Disposition: form-data; name=\"data" + "\";filename=\"" + + file.getName() + "\"" + crlf); + request.writeBytes(crlf); + + BufferedReader reader = new BufferedReader(new FileReader(file)); + String lineString = reader.readLine(); + while (lineString!=null) { + request.writeBytes(lineString); + lineString = reader.readLine(); + } + + + reader.close(); + request.writeBytes(crlf); + request.writeBytes(twoHyphens + boundary + + twoHyphens + crlf); + request.flush(); + request.close(); + InputStream responseStream = new + BufferedInputStream(httpUrlConnection.getInputStream()); + + BufferedReader responseStreamReader = + new BufferedReader(new InputStreamReader(responseStream)); + + String line = ""; + StringBuilder stringBuilder = new StringBuilder(); + + while ((line = responseStreamReader.readLine()) != null) { + stringBuilder.append(line).append("\n"); + } + responseStreamReader.close(); + + String response = stringBuilder.toString(); + responseStream.close(); + httpUrlConnection.disconnect(); + AnalysisLogger.getLogger().debug("Response "+response); + return response; + + } catch (IOException e) { + throw new Exception(e); + } finally { + if (httpUrlConnection != null) + httpUrlConnection.disconnect(); + } + } + + + public static DivaFilePostResponse uploadFile(File file) throws Exception, IOException, ParserConfigurationException, SAXException { + String result_xml = null; + try { + result_xml = postFile(file); + } catch (Exception e) { + e.printStackTrace(); + } - //connection - CloseableHttpClient httpclient = HttpClients.createDefault(); - HttpPost httppost = new HttpPost(WEB_HTTP+"/upload"); - - //Creation of MultipartEntity - FileBody bin = new FileBody(file); - HttpEntity reqEntity = MultipartEntityBuilder.create().addPart("data", bin).build(); - httppost.setEntity(reqEntity); - - //response Server - CloseableHttpResponse response = httpclient.execute(httppost); - Logger.getGlobal().info(response.getStatusLine()+""); - - HttpEntity resEntity = response.getEntity(); - if (resEntity == null) { + if (result_xml == null) { throw new SAXException("Error in HTTP response no response element found!"); } - //saving Response into String - String result_xml=""; - Scanner scanner=new Scanner(resEntity.getContent()); - while(scanner.hasNext()) - { - result_xml - +=scanner.nextLine(); - } //Create Document object by XMLResponse Document doc = loadXMLFromString(result_xml); @@ -79,11 +130,6 @@ public class DivaHTTPClient { String sessionid=root.getChildNodes().item(15).getTextContent(); - EntityUtils.consume(resEntity); - response.close(); - - httpclient.close(); - return new DivaFilePostResponse(obs_x0, obs_x1, obs_y0, obs_y1, obs_v0, obs_v1, obs_count, sessionid); } @@ -92,7 +138,7 @@ public class DivaHTTPClient { public static void main(String[] args) throws Exception { - DivaFilePostResponse response=uploadFile(new File("C:"+File.separator+"Users"+File.separator+"marbas"+File.separator+"Desktop"+File.separator+"temperature_argo.txt")); + DivaFilePostResponse response=uploadFile(new File("temperature_argo10.txt")); System.out.println(response); }