Author: vsiveton
Date: Wed Jan 5 10:29:59 2011
New Revision: 1055397
URL: http://svn.apache.org/viewvc?rev=1055397&view=rev
Log:
MDOAP-35: Fetch file-release url
o ping release url
Modified:
maven/plugins/trunk/maven-doap-plugin/src/main/java/org/apache/maven/plugin/doap/DoapMojo.java
maven/plugins/trunk/maven-doap-plugin/src/main/java/org/apache/maven/plugin/doap/DoapUtil.java
Modified:
maven/plugins/trunk/maven-doap-plugin/src/main/java/org/apache/maven/plugin/doap/DoapMojo.java
URL:
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-doap-plugin/src/main/java/org/apache/maven/plugin/doap/DoapMojo.java?rev=1055397&r1=1055396&r2=1055397&view=diff
==============================================================================
---
maven/plugins/trunk/maven-doap-plugin/src/main/java/org/apache/maven/plugin/doap/DoapMojo.java
(original)
+++
maven/plugins/trunk/maven-doap-plugin/src/main/java/org/apache/maven/plugin/doap/DoapMojo.java
Wed Jan 5 10:29:59 2011
@@ -1468,6 +1468,15 @@ public class DoapMojo
}
String fileRelease = repo.getUrl() + "/" + repo.pathOf(
artifactRelease );
+ try
+ {
+ DoapUtil.fetchURL( settings, new URL( fileRelease ) );
+ }
+ catch ( IOException e )
+ {
+ getLog().debug( "IOException :" + e.getMessage() );
+ continue;
+ }
DoapUtil.writeElement( writer, doapOptions.getXmlnsPrefix(),
"file-release", fileRelease );
Date releaseDate = null;
Modified:
maven/plugins/trunk/maven-doap-plugin/src/main/java/org/apache/maven/plugin/doap/DoapUtil.java
URL:
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-doap-plugin/src/main/java/org/apache/maven/plugin/doap/DoapUtil.java?rev=1055397&r1=1055396&r2=1055397&view=diff
==============================================================================
---
maven/plugins/trunk/maven-doap-plugin/src/main/java/org/apache/maven/plugin/doap/DoapUtil.java
(original)
+++
maven/plugins/trunk/maven-doap-plugin/src/main/java/org/apache/maven/plugin/doap/DoapUtil.java
Wed Jan 5 10:29:59 2011
@@ -20,9 +20,12 @@ package org.apache.maven.plugin.doap;
*/
import java.io.File;
+import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
+import java.net.SocketTimeoutException;
+import java.net.URL;
import java.text.DateFormat;
import java.util.ArrayList;
import java.util.Date;
@@ -37,7 +40,20 @@ import java.util.regex.Pattern;
import java.util.Set;
import java.util.Properties;
+import org.apache.commons.httpclient.Credentials;
+import org.apache.commons.httpclient.HttpClient;
+import org.apache.commons.httpclient.HttpStatus;
+import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
+import org.apache.commons.httpclient.UsernamePasswordCredentials;
+import org.apache.commons.httpclient.auth.AuthScope;
+import org.apache.commons.httpclient.methods.GetMethod;
+import org.apache.commons.httpclient.params.HttpClientParams;
+import org.apache.commons.httpclient.params.HttpMethodParams;
import org.apache.maven.model.Contributor;
+import org.apache.maven.settings.Proxy;
+import org.apache.maven.settings.Settings;
+import org.apache.maven.wagon.proxy.ProxyInfo;
+import org.apache.maven.wagon.proxy.ProxyUtils;
import org.codehaus.plexus.i18n.I18N;
import org.codehaus.plexus.util.IOUtil;
import org.codehaus.plexus.util.StringUtils;
@@ -68,6 +84,9 @@ public class DoapUtil
/** Magic number to repeat '=' */
private static final int REPEAT_EQUALS = 21;
+ /** The default timeout used when fetching url, i.e. 2000. */
+ public static final int DEFAULT_TIMEOUT = 2000;
+
/** RDF resource attribute */
protected static final String RDF_RESOURCE = "rdf:resource";
@@ -108,9 +127,11 @@ public class DoapUtil
*
* @param writer not null
* @param comment not null
+ * @throws IllegalArgumentException if comment is null or empty
* @since 1.1
*/
public static void writeComment( XMLWriter writer, String comment )
+ throws IllegalArgumentException
{
if ( StringUtils.isEmpty( comment ) )
{
@@ -473,6 +494,95 @@ public class DoapUtil
return matcher.matches();
}
+ /**
+ * Fetch an URL
+ *
+ * @param settings the user settings used to fetch the url with an active
proxy, if defined.
+ * @param url the url to fetch
+ * @throws IOException if any
+ * @see #DEFAULT_TIMEOUT
+ * @since 1.1
+ */
+ public static void fetchURL( Settings settings, URL url )
+ throws IOException
+ {
+ if ( url == null )
+ {
+ throw new IllegalArgumentException( "The url is null" );
+ }
+
+ if ( "file".equals( url.getProtocol() ) )
+ {
+ InputStream in = null;
+ try
+ {
+ in = url.openStream();
+ }
+ finally
+ {
+ IOUtil.close( in );
+ }
+
+ return;
+ }
+
+ // http, https...
+ HttpClient httpClient = new HttpClient( new
MultiThreadedHttpConnectionManager() );
+
httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(
DEFAULT_TIMEOUT );
+ httpClient.getHttpConnectionManager().getParams().setSoTimeout(
DEFAULT_TIMEOUT );
+ httpClient.getParams().setBooleanParameter(
HttpClientParams.ALLOW_CIRCULAR_REDIRECTS, true );
+
+ // Some web servers don't allow the default user-agent sent by
httpClient
+ httpClient.getParams().setParameter( HttpMethodParams.USER_AGENT,
+ "Mozilla/4.0 (compatible; MSIE
6.0; Windows NT 5.0)" );
+
+ if ( settings != null && settings.getActiveProxy() != null )
+ {
+ Proxy activeProxy = settings.getActiveProxy();
+
+ ProxyInfo proxyInfo = new ProxyInfo();
+ proxyInfo.setNonProxyHosts( activeProxy.getNonProxyHosts() );
+
+ if ( StringUtils.isNotEmpty( activeProxy.getHost() )
+ && !ProxyUtils.validateNonProxyHosts( proxyInfo, url.getHost()
) )
+ {
+ httpClient.getHostConfiguration().setProxy(
activeProxy.getHost(), activeProxy.getPort() );
+
+ if ( StringUtils.isNotEmpty( activeProxy.getUsername() ) &&
activeProxy.getPassword() != null )
+ {
+ Credentials credentials =
+ new UsernamePasswordCredentials(
activeProxy.getUsername(), activeProxy.getPassword() );
+
+ httpClient.getState().setProxyCredentials( AuthScope.ANY,
credentials );
+ }
+ }
+ }
+
+ GetMethod getMethod = new GetMethod( url.toString() );
+ try
+ {
+ int status;
+ try
+ {
+ status = httpClient.executeMethod( getMethod );
+ }
+ catch ( SocketTimeoutException e )
+ {
+ // could be a sporadic failure, one more retry before we give
up
+ status = httpClient.executeMethod( getMethod );
+ }
+
+ if ( status != HttpStatus.SC_OK )
+ {
+ throw new FileNotFoundException( url.toString() );
+ }
+ }
+ finally
+ {
+ getMethod.releaseConnection();
+ }
+ }
+
// ----------------------------------------------------------------------
// Private methods
// ----------------------------------------------------------------------