Author: bimargulies
Date: Thu Feb 28 05:32:52 2013
New Revision: 1451101

URL: http://svn.apache.org/r1451101
Log:
MCHANGES-299: ClassNotFoundException when running jira-report using Maven 2.2.1
o work around failure of maven 2 to set the context class loader.

Modified:
    
maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/jira/RestJiraDownloader.java

Modified: 
maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/jira/RestJiraDownloader.java
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/jira/RestJiraDownloader.java?rev=1451101&r1=1451100&r2=1451101&view=diff
==============================================================================
--- 
maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/jira/RestJiraDownloader.java
 (original)
+++ 
maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/jira/RestJiraDownloader.java
 Thu Feb 28 05:32:52 2013
@@ -95,68 +95,73 @@ public class RestJiraDownloader extends 
         resolvedPriorityIds = new ArrayList<String>(  );
     }
 
-    public void doExecute() throws Exception
+    public void doExecute()
+        throws Exception
     {
 
         Map<String, String> urlMap = JiraHelper.getJiraUrlAndProjectName( 
project.getIssueManagement().getUrl() );
         String jiraUrl = urlMap.get( "url" );
         jiraProject = urlMap.get( "project" );
-        WebClient client = setupWebClient( jiraUrl );
 
-        // We use version 2 of the REST API, that first appeared in JIRA 5
-        // Check if version 2 of the REST API is supported
-        // http://docs.atlassian.com/jira/REST/5.0/
-        // Note that serverInfo can always be accessed without authentication
-        client.replacePath( "/rest/api/2/serverInfo" );
-        client.accept( MediaType.APPLICATION_JSON );
-        Response siResponse = client.get();
-        if ( siResponse.getStatus() != Response.Status.OK.getStatusCode() )
+        // This classloader juggling is a workaround for a classic Maven 2 
class loader management bug.
+        ClassLoader ccl = Thread.currentThread().getContextClassLoader();
+        try
         {
-            throw new NoRest( "This JIRA server does not support version 2 of 
the REST API, which maven-changes-plugin requires." );
-        }
+            Thread.currentThread().setContextClassLoader( 
WebClient.class.getClassLoader( ) );
+            WebClient client = setupWebClient( jiraUrl );
+
+            // We use version 2 of the REST API, that first appeared in JIRA 5
+            // Check if version 2 of the REST API is supported
+            // http://docs.atlassian.com/jira/REST/5.0/
+            // Note that serverInfo can always be accessed without 
authentication
+            client.replacePath( "/rest/api/2/serverInfo" );
+            client.accept( MediaType.APPLICATION_JSON );
+            Response siResponse = client.get();
+            if ( siResponse.getStatus() != Response.Status.OK.getStatusCode() )
+            {
+                throw new NoRest(
+                    "This JIRA server does not support version 2 of the REST 
API, which maven-changes-plugin requires." );
+            }
 
-        doSessionAuth( client );
+            doSessionAuth( client );
 
-        resolveIds( client, jiraProject );
-
-        String jqlQuery = new JqlQueryBuilder( log )
-            .urlEncode( false )
-            .project( jiraProject )
-            .fixVersion( getFixFor() )
-            .fixVersionIds( resolvedFixVersionIds )
-            .statusIds( resolvedStatusIds )
-            .priorityIds( resolvedPriorityIds )
-            .resolutionIds( resolvedResolutionIds )
-            .components( resolvedComponentIds )
-            .typeIds( resolvedTypeIds )
-            .sortColumnNames( sortColumnNames )
-            .build();
-
-        StringWriter searchParamStringWriter = new StringWriter( );
-        JsonGenerator gen = jsonFactory.createGenerator( 
searchParamStringWriter );
-        gen.writeStartObject();
-        gen.writeStringField( "jql", jqlQuery );
-        gen.writeNumberField( "maxResults", nbEntriesMax );
-        gen.writeArrayFieldStart( "fields" );
-        // Retrieve all fields. If that seems slow, we can reconsider.
-        gen.writeString( "*all" );
-        gen.writeEndArray();
-        gen.writeEndObject();
-        gen.close();
-        client.replacePath( "/rest/api/2/search" );
-        client.type( MediaType.APPLICATION_JSON_TYPE );
-        client.accept( MediaType.APPLICATION_JSON_TYPE );
-        Response searchResponse = client.post( 
searchParamStringWriter.toString() );
-        if ( searchResponse.getStatus() != Response.Status.OK.getStatusCode() )
-        {
-            reportErrors( searchResponse );
-        }
-
-        JsonNode issueTree = getResponseTree( searchResponse );
-        assert issueTree.isObject();
-        JsonNode issuesNode = issueTree.get( "issues" );
-        assert issuesNode.isArray();
-        buildIssues( issuesNode, jiraUrl, jiraProject );
+            resolveIds( client, jiraProject );
+
+            String jqlQuery = new JqlQueryBuilder( log ).urlEncode( false 
).project( jiraProject ).fixVersion(
+                getFixFor() ).fixVersionIds( resolvedFixVersionIds 
).statusIds( resolvedStatusIds ).priorityIds(
+                resolvedPriorityIds ).resolutionIds( resolvedResolutionIds 
).components( resolvedComponentIds ).typeIds(
+                resolvedTypeIds ).sortColumnNames( sortColumnNames ).build();
+
+            StringWriter searchParamStringWriter = new StringWriter();
+            JsonGenerator gen = jsonFactory.createGenerator( 
searchParamStringWriter );
+            gen.writeStartObject();
+            gen.writeStringField( "jql", jqlQuery );
+            gen.writeNumberField( "maxResults", nbEntriesMax );
+            gen.writeArrayFieldStart( "fields" );
+            // Retrieve all fields. If that seems slow, we can reconsider.
+            gen.writeString( "*all" );
+            gen.writeEndArray();
+            gen.writeEndObject();
+            gen.close();
+            client.replacePath( "/rest/api/2/search" );
+            client.type( MediaType.APPLICATION_JSON_TYPE );
+            client.accept( MediaType.APPLICATION_JSON_TYPE );
+            Response searchResponse = client.post( 
searchParamStringWriter.toString() );
+            if ( searchResponse.getStatus() != 
Response.Status.OK.getStatusCode() )
+            {
+                reportErrors( searchResponse );
+            }
+
+            JsonNode issueTree = getResponseTree( searchResponse );
+            assert issueTree.isObject();
+            JsonNode issuesNode = issueTree.get( "issues" );
+            assert issuesNode.isArray();
+            buildIssues( issuesNode, jiraUrl, jiraProject );
+        }
+        finally
+        {
+            Thread.currentThread().setContextClassLoader( ccl );
+        }
     }
 
     private JsonNode getResponseTree( Response response )


Reply via email to