diff --git a/dspace-api/src/main/java/org/dspace/discovery/SolrServiceImpl.java b/dspace-api/src/main/java/org/dspace/discovery/SolrServiceImpl.java index aa9369130b..0a1176c4ba 100644 --- a/dspace-api/src/main/java/org/dspace/discovery/SolrServiceImpl.java +++ b/dspace-api/src/main/java/org/dspace/discovery/SolrServiceImpl.java @@ -7,7 +7,11 @@ */ package org.dspace.discovery; -import java.io.*; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.PrintWriter; +import java.io.StringWriter; import java.net.URI; import java.net.URISyntaxException; import java.sql.SQLException; @@ -31,8 +35,7 @@ import java.util.Vector; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.MapUtils; import org.apache.commons.collections.Transformer; -import org.apache.commons.httpclient.HttpClient; -import org.apache.commons.httpclient.methods.GetMethod; +import org.apache.commons.io.IOUtils; import org.apache.commons.lang.ArrayUtils; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.time.DateFormatUtils; @@ -42,6 +45,7 @@ import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.params.ClientPNames; import org.apache.http.client.utils.URIBuilder; +import org.apache.http.impl.client.DefaultHttpClient; import org.apache.log4j.Logger; import org.apache.solr.client.solrj.SolrQuery; import org.apache.solr.client.solrj.SolrServerException; @@ -1756,9 +1760,9 @@ public class SolrServiceImpl implements SearchService, IndexingService { urlBuilder.append(solrQuery.toString()); try { - GetMethod get = new GetMethod(urlBuilder.toString()); - new HttpClient().executeMethod(get); - return get.getResponseBodyAsStream(); + HttpGet get = new HttpGet(urlBuilder.toString()); + HttpResponse response = new DefaultHttpClient().execute(get); + return response.getEntity().getContent(); } catch (Exception e) { diff --git a/dspace-api/src/main/java/org/dspace/statistics/SolrLogger.java b/dspace-api/src/main/java/org/dspace/statistics/SolrLogger.java index 47eba5ddfa..489977a495 100644 --- a/dspace-api/src/main/java/org/dspace/statistics/SolrLogger.java +++ b/dspace-api/src/main/java/org/dspace/statistics/SolrLogger.java @@ -13,13 +13,20 @@ import com.maxmind.geoip.Location; import com.maxmind.geoip.LookupService; import java.io.*; +import java.net.URLEncoder; +import java.sql.SQLException; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; +import javax.servlet.http.HttpServletRequest; -import org.apache.commons.httpclient.HttpClient; -import org.apache.commons.httpclient.methods.GetMethod; import org.apache.commons.io.FileUtils; import org.apache.commons.lang.ArrayUtils; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.time.DateFormatUtils; +import org.apache.http.HttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.impl.client.DefaultHttpClient; import org.apache.log4j.Logger; import org.apache.solr.client.solrj.SolrQuery; import org.apache.solr.client.solrj.SolrServerException; @@ -49,13 +56,6 @@ import org.dspace.statistics.util.LocationUtils; import org.dspace.statistics.util.SpiderDetector; import org.dspace.usage.UsageWorkflowEvent; -import javax.servlet.http.HttpServletRequest; -import java.net.URLEncoder; -import java.sql.SQLException; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.*; - /** * Static holder for a HttpSolrClient connection pool to issue * usage logging events to Solr from DSpace libraries, and some static query @@ -1322,9 +1322,9 @@ public class SolrLogger String solrRequestUrl = solr.getBaseURL() + "/select"; solrRequestUrl = generateURL(solrRequestUrl, yearQueryParams); - GetMethod get = new GetMethod(solrRequestUrl); - new HttpClient().executeMethod(get); - InputStream csvInputstream = get.getResponseBodyAsStream(); + HttpGet get = new HttpGet(solrRequestUrl); + HttpResponse response = new DefaultHttpClient().execute(get); + InputStream csvInputstream = response.getEntity().getContent(); //Write the csv ouput to a file ! File csvFile = new File(tempDirectory.getPath() + File.separatorChar + "temp." + dcStart.getYear() + "." + i + ".csv"); FileUtils.copyInputStreamToFile(csvInputstream, csvFile); @@ -1398,10 +1398,10 @@ public class SolrLogger String solrRequestUrl = solr.getBaseURL() + "/select"; solrRequestUrl = generateURL(solrRequestUrl, params); - GetMethod get = new GetMethod(solrRequestUrl); - new HttpClient().executeMethod(get); + HttpGet get = new HttpGet(solrRequestUrl); + HttpResponse response = new DefaultHttpClient().execute(get); - InputStream csvOutput = get.getResponseBodyAsStream(); + InputStream csvOutput = response.getEntity().getContent(); Reader csvReader = new InputStreamReader(csvOutput); List rows = new CSVReader(csvReader).readAll(); String[][] csvParsed = rows.toArray(new String[rows.size()][]); diff --git a/dspace-api/src/main/java/org/dspace/submit/lookup/ArXivOnlineDataLoader.java b/dspace-api/src/main/java/org/dspace/submit/lookup/ArXivOnlineDataLoader.java index 0bb94f1a32..73627006f2 100644 --- a/dspace-api/src/main/java/org/dspace/submit/lookup/ArXivOnlineDataLoader.java +++ b/dspace-api/src/main/java/org/dspace/submit/lookup/ArXivOnlineDataLoader.java @@ -15,8 +15,8 @@ import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Set; +import org.apache.http.HttpException; -import org.apache.commons.httpclient.HttpException; import org.dspace.core.Context; /** diff --git a/dspace-api/src/main/java/org/dspace/submit/lookup/ArXivService.java b/dspace-api/src/main/java/org/dspace/submit/lookup/ArXivService.java index 42e3b1de08..88bac25282 100644 --- a/dspace-api/src/main/java/org/dspace/submit/lookup/ArXivService.java +++ b/dspace-api/src/main/java/org/dspace/submit/lookup/ArXivService.java @@ -9,10 +9,8 @@ package org.dspace.submit.lookup; import gr.ekt.bte.core.Record; -import java.io.File; -import java.io.FileInputStream; import java.io.IOException; -import java.io.InputStream; +import java.net.URISyntaxException; import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -20,14 +18,18 @@ import java.util.Set; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; -import org.apache.commons.httpclient.HttpClient; -import org.apache.commons.httpclient.HttpException; -import org.apache.commons.httpclient.HttpStatus; -import org.apache.commons.httpclient.NameValuePair; -import org.apache.commons.httpclient.methods.GetMethod; import org.apache.commons.lang.StringUtils; +import org.apache.http.HttpException; +import org.apache.http.HttpResponse; +import org.apache.http.HttpStatus; +import org.apache.http.StatusLine; +import org.apache.http.client.HttpClient; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.utils.URIBuilder; +import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.params.CoreConnectionPNames; +import org.apache.http.params.HttpParams; import org.dspace.app.util.XMLUtils; -import org.dspace.core.ConfigurationManager; import org.w3c.dom.Document; import org.w3c.dom.Element; @@ -41,6 +43,11 @@ public class ArXivService { private int timeout = 1000; + /** + * How long to wait for a connection to be established. + * + * @param timeout milliseconds + */ public void setTimeout(int timeout) { this.timeout = timeout; @@ -79,21 +86,28 @@ public class ArXivService throws IOException, HttpException { List results = new ArrayList(); - GetMethod method = null; + HttpGet method = null; try { - HttpClient client = new HttpClient(); - client.setTimeout(timeout); - method = new GetMethod("http://export.arxiv.org/api/query"); - NameValuePair id = new NameValuePair("id_list", arxivid); - NameValuePair queryParam = new NameValuePair("search_query", - query); - NameValuePair count = new NameValuePair("max_results", - String.valueOf(max_result)); - method.setQueryString(new NameValuePair[] { id, queryParam, - count }); - // Execute the method. - int statusCode = client.executeMethod(method); + HttpClient client = new DefaultHttpClient(); + HttpParams params = client.getParams(); + params.setIntParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, timeout); + + try { + URIBuilder uriBuilder = new URIBuilder("http://export.arxiv.org/api/query"); + uriBuilder.addParameter("id_list", arxivid); + uriBuilder.addParameter("search_query", query); + uriBuilder.addParameter("max_results", String.valueOf(max_result)); + method = new HttpGet(uriBuilder.build()); + } catch (URISyntaxException ex) + { + throw new HttpException(ex.getMessage()); + } + + // Execute the method. + HttpResponse response = client.execute(method); + StatusLine responseStatus = response.getStatusLine(); + int statusCode = responseStatus.getStatusCode(); if (statusCode != HttpStatus.SC_OK) { @@ -101,7 +115,7 @@ public class ArXivService throw new RuntimeException("arXiv query is not valid"); else throw new RuntimeException("Http call failed: " - + method.getStatusLine()); + + responseStatus); } try @@ -113,7 +127,7 @@ public class ArXivService factory.setIgnoringElementContentWhitespace(true); DocumentBuilder db = factory.newDocumentBuilder(); - Document inDoc = db.parse(method.getResponseBodyAsStream()); + Document inDoc = db.parse(response.getEntity().getContent()); Element xmlRoot = inDoc.getDocumentElement(); List dataRoots = XMLUtils.getElementList(xmlRoot, diff --git a/dspace-api/src/main/java/org/dspace/submit/lookup/CiNiiOnlineDataLoader.java b/dspace-api/src/main/java/org/dspace/submit/lookup/CiNiiOnlineDataLoader.java index db831c751c..2f0d662b88 100644 --- a/dspace-api/src/main/java/org/dspace/submit/lookup/CiNiiOnlineDataLoader.java +++ b/dspace-api/src/main/java/org/dspace/submit/lookup/CiNiiOnlineDataLoader.java @@ -15,8 +15,8 @@ import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Set; +import org.apache.http.HttpException; -import org.apache.commons.httpclient.HttpException; import org.dspace.core.Context; /** diff --git a/dspace-api/src/main/java/org/dspace/submit/lookup/CiNiiService.java b/dspace-api/src/main/java/org/dspace/submit/lookup/CiNiiService.java index e2092c8c49..4eee0944f4 100644 --- a/dspace-api/src/main/java/org/dspace/submit/lookup/CiNiiService.java +++ b/dspace-api/src/main/java/org/dspace/submit/lookup/CiNiiService.java @@ -9,24 +9,22 @@ package org.dspace.submit.lookup; import gr.ekt.bte.core.Record; -import java.io.File; -import java.io.FileInputStream; import java.io.IOException; -import java.io.InputStream; import java.net.URLEncoder; import java.util.ArrayList; import java.util.List; -import java.util.Set; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; +import org.apache.http.HttpException; +import org.apache.http.HttpResponse; +import org.apache.http.HttpStatus; +import org.apache.http.StatusLine; +import org.apache.http.client.HttpClient; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.params.CoreConnectionPNames; -import org.apache.commons.httpclient.HttpClient; -import org.apache.commons.httpclient.HttpException; -import org.apache.commons.httpclient.HttpStatus; -import org.apache.commons.httpclient.NameValuePair; -import org.apache.commons.httpclient.methods.GetMethod; -import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.dspace.app.util.XMLUtils; import org.w3c.dom.Document; @@ -38,7 +36,7 @@ import org.w3c.dom.Element; public class CiNiiService { /** log4j category */ - private static Logger log = Logger.getLogger(CiNiiService.class); + private static final Logger log = Logger.getLogger(CiNiiService.class); private int timeout = 1000; @@ -82,14 +80,16 @@ public class CiNiiService private Record search(String id, String appId) throws IOException, HttpException { - GetMethod method = null; + HttpGet method = null; try { - HttpClient client = new HttpClient(); - client.setTimeout(timeout); - method = new GetMethod("http://ci.nii.ac.jp/naid/"+id+".rdf?appid="+appId); + HttpClient client = new DefaultHttpClient(); + client.getParams().setIntParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, timeout); + method = new HttpGet("http://ci.nii.ac.jp/naid/"+id+".rdf?appid="+appId); // Execute the method. - int statusCode = client.executeMethod(method); + HttpResponse response = client.execute(method); + StatusLine statusLine = response.getStatusLine(); + int statusCode = statusLine.getStatusCode(); if (statusCode != HttpStatus.SC_OK) { @@ -97,7 +97,7 @@ public class CiNiiService throw new RuntimeException("CiNii RDF is not valid"); else throw new RuntimeException("CiNii RDF Http call failed: " - + method.getStatusLine()); + + statusLine); } try @@ -109,7 +109,7 @@ public class CiNiiService factory.setIgnoringElementContentWhitespace(true); DocumentBuilder db = factory.newDocumentBuilder(); - Document inDoc = db.parse(method.getResponseBodyAsStream()); + Document inDoc = db.parse(response.getEntity().getContent()); Element xmlRoot = inDoc.getDocumentElement(); @@ -144,12 +144,12 @@ public class CiNiiService return null; } - GetMethod method = null; + HttpGet method = null; List ids = new ArrayList(); try { - HttpClient client = new HttpClient(); - client.setTimeout(timeout); + HttpClient client = new DefaultHttpClient(); + client.getParams().setIntParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, timeout); StringBuilder query = new StringBuilder(); query.append("format=rss&appid=").append(appId) .append("&count=").append(maxResults); @@ -166,16 +166,18 @@ public class CiNiiService query.append("&year_from=").append(String.valueOf(year)); query.append("&year_to=").append(String.valueOf(year)); } - method = new GetMethod("http://ci.nii.ac.jp/opensearch/search?"+query.toString()); + method = new HttpGet("http://ci.nii.ac.jp/opensearch/search?"+query.toString()); // Execute the method. - int statusCode = client.executeMethod(method); + HttpResponse response = client.execute(method); + StatusLine statusLine = response.getStatusLine(); + int statusCode = statusLine.getStatusCode(); if (statusCode != HttpStatus.SC_OK) { if (statusCode == HttpStatus.SC_BAD_REQUEST) throw new RuntimeException("CiNii OpenSearch query is not valid"); else throw new RuntimeException("CiNii OpenSearch call failed: " - + method.getStatusLine()); + + statusLine); } try @@ -187,7 +189,7 @@ public class CiNiiService factory.setIgnoringElementContentWhitespace(true); DocumentBuilder db = factory.newDocumentBuilder(); - Document inDoc = db.parse(method.getResponseBodyAsStream()); + Document inDoc = db.parse(response.getEntity().getContent()); Element xmlRoot = inDoc.getDocumentElement(); List items = XMLUtils.getElementList(xmlRoot, "item"); diff --git a/dspace-api/src/main/java/org/dspace/submit/lookup/CrossRefOnlineDataLoader.java b/dspace-api/src/main/java/org/dspace/submit/lookup/CrossRefOnlineDataLoader.java index ec86ac45ec..c47b3262e7 100644 --- a/dspace-api/src/main/java/org/dspace/submit/lookup/CrossRefOnlineDataLoader.java +++ b/dspace-api/src/main/java/org/dspace/submit/lookup/CrossRefOnlineDataLoader.java @@ -18,7 +18,7 @@ import java.util.Set; import javax.xml.parsers.ParserConfigurationException; -import org.apache.commons.httpclient.HttpException; +import org.apache.http.HttpException; import org.dspace.core.Context; import org.jdom.JDOMException; import org.xml.sax.SAXException; diff --git a/dspace-api/src/main/java/org/dspace/submit/lookup/CrossRefService.java b/dspace-api/src/main/java/org/dspace/submit/lookup/CrossRefService.java index 32a5fa19ce..ee0fa6675d 100644 --- a/dspace-api/src/main/java/org/dspace/submit/lookup/CrossRefService.java +++ b/dspace-api/src/main/java/org/dspace/submit/lookup/CrossRefService.java @@ -21,11 +21,6 @@ import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; -import org.apache.commons.httpclient.HttpClient; -import org.apache.commons.httpclient.HttpException; -import org.apache.commons.httpclient.HttpStatus; -import org.apache.commons.httpclient.NameValuePair; -import org.apache.commons.httpclient.methods.GetMethod; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.dspace.app.util.XMLUtils; @@ -38,6 +33,18 @@ import org.xml.sax.SAXException; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; +import java.net.URISyntaxException; +import java.nio.charset.StandardCharsets; +import org.apache.commons.io.IOUtils; +import org.apache.http.HttpException; +import org.apache.http.HttpResponse; +import org.apache.http.HttpStatus; +import org.apache.http.StatusLine; +import org.apache.http.client.HttpClient; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.utils.URIBuilder; +import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.params.CoreConnectionPNames; /** * @author Andrea Bollini @@ -68,27 +75,32 @@ public class CrossRefService { try { - GetMethod method = null; + HttpGet method = null; try { - HttpClient client = new HttpClient(); - client.setConnectionTimeout(timeout); - method = new GetMethod( - "http://www.crossref.org/openurl/"); + HttpClient client = new DefaultHttpClient(); + client.getParams().setIntParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, timeout); - NameValuePair pid = new NameValuePair("pid", apiKey); - NameValuePair noredirect = new NameValuePair( - "noredirect", "true"); - NameValuePair id = new NameValuePair("id", record); - method.setQueryString(new NameValuePair[] { pid, - noredirect, id }); - // Execute the method. - int statusCode = client.executeMethod(method); + try { + URIBuilder uriBuilder = new URIBuilder( + "http://www.crossref.org/openurl/"); + uriBuilder.addParameter("pid", apiKey); + uriBuilder.addParameter("noredirect", "true"); + uriBuilder.addParameter("id", record); + method = new HttpGet(uriBuilder.build()); + } catch (URISyntaxException ex) { + throw new HttpException("Request not sent", ex); + } + + // Execute the method. + HttpResponse response = client.execute(method); + StatusLine statusLine = response.getStatusLine(); + int statusCode = statusLine.getStatusCode(); if (statusCode != HttpStatus.SC_OK) { throw new RuntimeException("Http call failed: " - + method.getStatusLine()); + + statusLine); } Record crossitem; @@ -102,8 +114,7 @@ public class CrossRefService DocumentBuilder db = factory .newDocumentBuilder(); - Document inDoc = db.parse(method - .getResponseBodyAsStream()); + Document inDoc = db.parse(response.getEntity().getContent()); Element xmlRoot = inDoc.getDocumentElement(); Element queryResult = XMLUtils.getSingleElement(xmlRoot, "query_result"); @@ -142,57 +153,51 @@ public class CrossRefService return results; } - public NameValuePair[] buildQueryPart(String title, String author, - int year, int count) - { - StringBuffer sb = new StringBuffer(); - if (StringUtils.isNotBlank(title)) - { - sb.append(title); - } - sb.append(" "); - if (StringUtils.isNotBlank(author)) - { - sb.append(author); - } - String q = sb.toString().trim(); - NameValuePair qParam = new NameValuePair("q", title); - NameValuePair yearParam = new NameValuePair("year", - year != -1 ? String.valueOf(year) : ""); - NameValuePair countParam = new NameValuePair("rows", - count != -1 ? String.valueOf(count) : ""); - - NameValuePair[] query = new NameValuePair[] { qParam, yearParam, - countParam }; - return query; - } - public List search(Context context, String title, String authors, int year, int count, String apiKey) throws IOException, HttpException { - GetMethod method = null; + HttpGet method = null; try { - NameValuePair[] query = buildQueryPart(title, authors, year, count); - HttpClient client = new HttpClient(); - client.setTimeout(timeout); - method = new GetMethod("http://search.labs.crossref.org/dois"); + HttpClient client = new DefaultHttpClient(); + client.getParams().setIntParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, timeout); + + URIBuilder uriBuilder = new URIBuilder("http://search.labs.crossref.org/dois"); + + StringBuilder sb = new StringBuilder(); + if (StringUtils.isNotBlank(title)) + { + sb.append(title); + } + sb.append(" "); + if (StringUtils.isNotBlank(authors)) + { + sb.append(authors); + } + String q = sb.toString().trim(); + uriBuilder.addParameter("q", q); + + uriBuilder.addParameter("year", year != -1 ? String.valueOf(year) : ""); + uriBuilder.addParameter("rows", count != -1 ? String.valueOf(count) : ""); + method = new HttpGet(uriBuilder.build()); - method.setQueryString(query); // Execute the method. - int statusCode = client.executeMethod(method); + HttpResponse response = client.execute(method); + StatusLine statusLine = response.getStatusLine(); + int statusCode = statusLine.getStatusCode(); if (statusCode != HttpStatus.SC_OK) { throw new RuntimeException("Http call failed:: " - + method.getStatusLine()); + + statusLine); } Gson gson = new Gson(); Type listType = new TypeToken>() { }.getType(); - List json = gson.fromJson(method.getResponseBodyAsString(), + List json = gson.fromJson( + IOUtils.toString(response.getEntity().getContent(), StandardCharsets.UTF_8), listType); Set dois = new HashSet(); for (Map r : json) diff --git a/dspace-api/src/main/java/org/dspace/submit/lookup/NetworkSubmissionLookupDataLoader.java b/dspace-api/src/main/java/org/dspace/submit/lookup/NetworkSubmissionLookupDataLoader.java index be22f37111..2cfdc9aee0 100644 --- a/dspace-api/src/main/java/org/dspace/submit/lookup/NetworkSubmissionLookupDataLoader.java +++ b/dspace-api/src/main/java/org/dspace/submit/lookup/NetworkSubmissionLookupDataLoader.java @@ -10,25 +10,18 @@ package org.dspace.submit.lookup; import gr.ekt.bte.core.DataLoadingSpec; import gr.ekt.bte.core.Record; import gr.ekt.bte.core.RecordSet; -import gr.ekt.bte.core.StringValue; import gr.ekt.bte.core.Value; import gr.ekt.bte.exceptions.MalformedSourceException; import java.io.IOException; -import java.lang.reflect.Field; -import java.lang.reflect.GenericArrayType; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.lang.reflect.ParameterizedType; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; -import org.apache.commons.httpclient.HttpException; import org.apache.commons.lang.StringUtils; +import org.apache.http.HttpException; import org.dspace.core.Context; -import org.dspace.submit.util.SubmissionLookupPublication; /** * @author Andrea Bollini diff --git a/dspace-api/src/main/java/org/dspace/submit/lookup/PubmedOnlineDataLoader.java b/dspace-api/src/main/java/org/dspace/submit/lookup/PubmedOnlineDataLoader.java index 85c996404e..907a7d53b4 100644 --- a/dspace-api/src/main/java/org/dspace/submit/lookup/PubmedOnlineDataLoader.java +++ b/dspace-api/src/main/java/org/dspace/submit/lookup/PubmedOnlineDataLoader.java @@ -15,8 +15,8 @@ import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Set; +import org.apache.http.HttpException; -import org.apache.commons.httpclient.HttpException; import org.apache.log4j.Logger; import org.dspace.core.Context; import org.dspace.core.LogManager; @@ -31,7 +31,7 @@ public class PubmedOnlineDataLoader extends NetworkSubmissionLookupDataLoader { private boolean searchProvider = true; - private static Logger log = Logger.getLogger(PubmedOnlineDataLoader.class); + private static final Logger log = Logger.getLogger(PubmedOnlineDataLoader.class); private PubmedService pubmedService = new PubmedService(); diff --git a/dspace-api/src/main/java/org/dspace/submit/lookup/PubmedService.java b/dspace-api/src/main/java/org/dspace/submit/lookup/PubmedService.java index d493672f34..816d8b1e83 100644 --- a/dspace-api/src/main/java/org/dspace/submit/lookup/PubmedService.java +++ b/dspace-api/src/main/java/org/dspace/submit/lookup/PubmedService.java @@ -13,6 +13,7 @@ import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; +import java.net.URISyntaxException; import java.util.ArrayList; import java.util.List; @@ -20,12 +21,16 @@ import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; -import org.apache.commons.httpclient.HttpClient; -import org.apache.commons.httpclient.HttpException; -import org.apache.commons.httpclient.HttpStatus; -import org.apache.commons.httpclient.NameValuePair; -import org.apache.commons.httpclient.methods.GetMethod; import org.apache.commons.lang.StringUtils; +import org.apache.http.HttpException; +import org.apache.http.HttpResponse; +import org.apache.http.HttpStatus; +import org.apache.http.StatusLine; +import org.apache.http.client.HttpClient; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.utils.URIBuilder; +import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.params.CoreConnectionPNames; import org.apache.log4j.Logger; import org.dspace.app.util.XMLUtils; import org.dspace.core.ConfigurationManager; @@ -42,7 +47,7 @@ import org.xml.sax.SAXException; public class PubmedService { - private static Logger log = Logger.getLogger(PubmedService.class); + private static final Logger log = Logger.getLogger(PubmedService.class); private int timeout = 1000; @@ -96,28 +101,29 @@ public class PubmedService List results = null; if (!ConfigurationManager.getBooleanProperty(SubmissionLookupService.CFG_MODULE, "remoteservice.demo")) { - GetMethod method = null; + HttpGet method = null; try { - HttpClient client = new HttpClient(); - client.setTimeout(timeout); - method = new GetMethod( - "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi"); + HttpClient client = new DefaultHttpClient(); + client.getParams().setIntParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, timeout); + + URIBuilder uriBuilder = new URIBuilder( + "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi"); + uriBuilder.addParameter("db", "pubmed"); + uriBuilder.addParameter("datetype", "edat"); + uriBuilder.addParameter("retmax", "10"); + uriBuilder.addParameter("term", query); + method = new HttpGet(uriBuilder.build()); - NameValuePair db = new NameValuePair("db", "pubmed"); - NameValuePair datetype = new NameValuePair("datetype", "edat"); - NameValuePair retmax = new NameValuePair("retmax", "10"); - NameValuePair queryParam = new NameValuePair("term", - query.toString()); - method.setQueryString(new NameValuePair[] { db, queryParam, - retmax, datetype }); // Execute the method. - int statusCode = client.executeMethod(method); + HttpResponse response = client.execute(method); + StatusLine statusLine = response.getStatusLine(); + int statusCode = statusLine.getStatusCode(); if (statusCode != HttpStatus.SC_OK) { throw new RuntimeException("WS call failed: " - + method.getStatusLine()); + + statusLine); } DocumentBuilderFactory factory = DocumentBuilderFactory @@ -131,8 +137,7 @@ public class PubmedService { builder = factory.newDocumentBuilder(); - Document inDoc = builder.parse(method - .getResponseBodyAsStream()); + Document inDoc = builder.parse(response.getEntity().getContent()); Element xmlRoot = inDoc.getDocumentElement(); Element idList = XMLUtils.getSingleElement(xmlRoot, @@ -213,28 +218,34 @@ public class PubmedService SAXException { List results = new ArrayList(); - GetMethod method = null; + HttpGet method = null; try { - HttpClient client = new HttpClient(); - client.setTimeout(5 * timeout); - method = new GetMethod( - "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi"); + HttpClient client = new DefaultHttpClient(); + client.getParams().setIntParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 5 * timeout); - NameValuePair db = new NameValuePair("db", "pubmed"); - NameValuePair retmode = new NameValuePair("retmode", "xml"); - NameValuePair rettype = new NameValuePair("rettype", "full"); - NameValuePair id = new NameValuePair("id", StringUtils.join( - pubmedIDs.iterator(), ",")); - method.setQueryString(new NameValuePair[] { db, retmode, - rettype, id }); - // Execute the method. - int statusCode = client.executeMethod(method); + try { + URIBuilder uriBuilder = new URIBuilder( + "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi"); + uriBuilder.addParameter("db", "pubmed"); + uriBuilder.addParameter("retmode", "xml"); + uriBuilder.addParameter("rettype", "full"); + uriBuilder.addParameter("id", StringUtils.join( + pubmedIDs.iterator(), ",")); + method = new HttpGet(uriBuilder.build()); + } catch (URISyntaxException ex) + { + throw new RuntimeException("Request not sent", ex); + } + + // Execute the method. + HttpResponse response = client.execute(method); + StatusLine statusLine = response.getStatusLine(); + int statusCode = statusLine.getStatusCode(); if (statusCode != HttpStatus.SC_OK) { - throw new RuntimeException("WS call failed: " - + method.getStatusLine()); + throw new RuntimeException("WS call failed: " + statusLine); } DocumentBuilderFactory factory = DocumentBuilderFactory @@ -245,7 +256,7 @@ public class PubmedService DocumentBuilder builder = factory.newDocumentBuilder(); Document inDoc = builder - .parse(method.getResponseBodyAsStream()); + .parse(response.getEntity().getContent()); Element xmlRoot = inDoc.getDocumentElement(); List pubArticles = XMLUtils.getElementList(xmlRoot, diff --git a/dspace-api/src/main/java/org/dspace/submit/lookup/SubmissionLookupDataLoader.java b/dspace-api/src/main/java/org/dspace/submit/lookup/SubmissionLookupDataLoader.java index df6f453ef7..4c745a5317 100644 --- a/dspace-api/src/main/java/org/dspace/submit/lookup/SubmissionLookupDataLoader.java +++ b/dspace-api/src/main/java/org/dspace/submit/lookup/SubmissionLookupDataLoader.java @@ -12,11 +12,11 @@ import java.util.List; import java.util.Map; import java.util.Set; -import org.apache.commons.httpclient.HttpException; import org.dspace.core.Context; import gr.ekt.bte.core.DataLoader; import gr.ekt.bte.core.Record; +import org.apache.http.HttpException; /** * @author Andrea Bollini