You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@archiva.apache.org by ol...@apache.org on 2011/11/10 11:04:22 UTC
svn commit: r1200250 - in
/archiva/trunk/archiva-modules/archiva-web/archiva-rest:
archiva-rest-api/src/main/java/org/apache/archiva/rest/api/services/
archiva-rest-services/src/main/java/org/apache/archiva/rest/services/
archiva-rest-services/src/main...
Author: olamy
Date: Thu Nov 10 10:04:22 2011
New Revision: 1200250
URL: http://svn.apache.org/viewvc?rev=1200250&view=rev
Log:
add an exception Mapper to customize reponse http status and response content
Added:
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/RestError.java
- copied, changed from r1200249, archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/services/ArchivaRestServiceException.java
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/interceptors/ArchivaRestServiceExceptionMapper.java
- copied, changed from r1200249, archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/interceptors/HttpContextThreadLocal.java
Modified:
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/services/ArchivaRestServiceException.java
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRepositoriesService.java
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/interceptors/HttpContextThreadLocal.java
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/resources/META-INF/spring-context.xml
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/RepositoriesServiceTest.java
Modified: archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/services/ArchivaRestServiceException.java
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/services/ArchivaRestServiceException.java?rev=1200250&r1=1200249&r2=1200250&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/services/ArchivaRestServiceException.java (original)
+++ archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/services/ArchivaRestServiceException.java Thu Nov 10 10:04:22 2011
@@ -18,6 +18,8 @@ package org.apache.archiva.rest.api.serv
* under the License.
*/
+import javax.xml.bind.annotation.XmlRootElement;
+
/**
* @author Olivier Lamy
* @since 1.4-M1
@@ -27,6 +29,9 @@ public class ArchivaRestServiceException
{
private int httpErrorCode;
+
+ private String errorKey;
+
public ArchivaRestServiceException( String message )
{
@@ -48,4 +53,14 @@ public class ArchivaRestServiceException
{
this.httpErrorCode = httpErrorCode;
}
+
+ public String getErrorKey()
+ {
+ return errorKey;
+ }
+
+ public void setErrorKey( String errorKey )
+ {
+ this.errorKey = errorKey;
+ }
}
Modified: archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRepositoriesService.java
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRepositoriesService.java?rev=1200250&r1=1200249&r2=1200250&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRepositoriesService.java (original)
+++ archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRepositoriesService.java Thu Nov 10 10:04:22 2011
@@ -81,6 +81,8 @@ import org.springframework.stereotype.Se
import javax.inject.Inject;
import javax.inject.Named;
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.Response;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
@@ -614,11 +616,23 @@ public class DefaultRepositoriesService
{
// TODO use constants from a class instead of magic number
throw new ArchivaRestServiceException( "deleteArtifact call: userName not found", 403 );
+
}
if ( artifact == null )
{
throw new ArchivaRestServiceException( "artifact cannot be null", 400 );
}
+
+ if ( StringUtils.isEmpty( artifact.getGroupId() ) )
+ {
+ throw new ArchivaRestServiceException( "artifact.groupId cannot be null", 400 );
+ }
+
+ if ( StringUtils.isEmpty( artifact.getArtifactId() ) )
+ {
+ throw new ArchivaRestServiceException( "artifact.artifactId cannot be null", 400 );
+ }
+
if ( StringUtils.isEmpty( repositoryId ) )
{
throw new ArchivaRestServiceException( "repositoryId cannot be null", 400 );
Copied: archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/RestError.java (from r1200249, archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/services/ArchivaRestServiceException.java)
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/RestError.java?p2=archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/RestError.java&p1=archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/services/ArchivaRestServiceException.java&r1=1200249&r2=1200250&rev=1200250&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/services/ArchivaRestServiceException.java (original)
+++ archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/RestError.java Thu Nov 10 10:04:22 2011
@@ -1,4 +1,4 @@
-package org.apache.archiva.rest.api.services;
+package org.apache.archiva.rest.services;
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
@@ -18,25 +18,34 @@ package org.apache.archiva.rest.api.serv
* under the License.
*/
+import org.apache.archiva.rest.api.services.ArchivaRestServiceException;
+
+import javax.xml.bind.annotation.XmlRootElement;
+
/**
* @author Olivier Lamy
- * @since 1.4-M1
+ * @since 1.4-M2
*/
-public class ArchivaRestServiceException
- extends Exception
+@XmlRootElement( name = "restError" )
+public class RestError
{
-
+
private int httpErrorCode;
-
- public ArchivaRestServiceException( String message )
+
+ private String errorKey;
+
+ private String errorMessage;
+
+ public RestError()
{
- super( message );
+ // no op
}
-
- public ArchivaRestServiceException( String s, int httpErrorCode )
+
+ public RestError( ArchivaRestServiceException e)
{
- super( s );
- this.httpErrorCode = httpErrorCode;
+ httpErrorCode = e.getHttpErrorCode();
+ errorKey = e.getErrorKey();
+ errorMessage = e.getMessage();
}
public int getHttpErrorCode()
@@ -48,4 +57,24 @@ public class ArchivaRestServiceException
{
this.httpErrorCode = httpErrorCode;
}
+
+ public String getErrorKey()
+ {
+ return errorKey;
+ }
+
+ public void setErrorKey( String errorKey )
+ {
+ this.errorKey = errorKey;
+ }
+
+ public String getErrorMessage()
+ {
+ return errorMessage;
+ }
+
+ public void setErrorMessage( String errorMessage )
+ {
+ this.errorMessage = errorMessage;
+ }
}
Copied: archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/interceptors/ArchivaRestServiceExceptionMapper.java (from r1200249, archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/interceptors/HttpContextThreadLocal.java)
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/interceptors/ArchivaRestServiceExceptionMapper.java?p2=archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/interceptors/ArchivaRestServiceExceptionMapper.java&p1=archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/interceptors/HttpContextThreadLocal.java&r1=1200249&r2=1200250&rev=1200250&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/interceptors/HttpContextThreadLocal.java (original)
+++ archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/interceptors/ArchivaRestServiceExceptionMapper.java Thu Nov 10 10:04:22 2011
@@ -18,24 +18,28 @@ package org.apache.archiva.rest.services
* under the License.
*/
-import org.codehaus.redback.rest.services.RedbackRequestInformation;
+import org.apache.archiva.rest.api.services.ArchivaRestServiceException;
+import org.apache.archiva.rest.services.RestError;
+import org.springframework.stereotype.Service;
+
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.ext.ExceptionMapper;
+import javax.ws.rs.ext.Provider;
/**
* @author Olivier Lamy
- * @since 1.4-M1
+ * @since 1.4-M2
*/
-public class HttpContextThreadLocal
+@Provider
+@Service( "archivaRestServiceExceptionMapper" )
+public class ArchivaRestServiceExceptionMapper
+ implements ExceptionMapper<ArchivaRestServiceException>
{
- private static final ThreadLocal<HttpContext> userThreadLocal =
- new ThreadLocal<HttpContext>();
-
- public static void set( HttpContext httpContext )
- {
- userThreadLocal.set( httpContext );
- }
-
- public static HttpContext get()
+ public Response toResponse( ArchivaRestServiceException e )
{
- return userThreadLocal.get();
+ RestError restError = new RestError( e );
+ Response.ResponseBuilder responseBuilder = Response.status( e.getHttpErrorCode() ).entity( restError );
+ return responseBuilder.build();
}
}
Modified: archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/interceptors/HttpContextThreadLocal.java
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/interceptors/HttpContextThreadLocal.java?rev=1200250&r1=1200249&r2=1200250&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/interceptors/HttpContextThreadLocal.java (original)
+++ archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/interceptors/HttpContextThreadLocal.java Thu Nov 10 10:04:22 2011
@@ -18,8 +18,6 @@ package org.apache.archiva.rest.services
* under the License.
*/
-import org.codehaus.redback.rest.services.RedbackRequestInformation;
-
/**
* @author Olivier Lamy
* @since 1.4-M1
Modified: archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/resources/META-INF/spring-context.xml
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/resources/META-INF/spring-context.xml?rev=1200250&r1=1200249&r2=1200250&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/resources/META-INF/spring-context.xml (original)
+++ archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/resources/META-INF/spring-context.xml Thu Nov 10 10:04:22 2011
@@ -45,6 +45,7 @@
<ref bean="authenticationInterceptor#rest"/>
<ref bean="permissionInterceptor#rest"/>
<ref bean="httpContextThreadLocalInterceptor#rest"/>
+ <ref bean="archivaRestServiceExceptionMapper"/>
</jaxrs:providers>
<jaxrs:serviceBeans>
@@ -64,6 +65,9 @@
<ref bean="httpContextThreadLocalCleaner#rest"/>
</jaxrs:outInterceptors>
+ <jaxrs:outFaultInterceptors>
+
+ </jaxrs:outFaultInterceptors>
</jaxrs:server>
</beans>
\ No newline at end of file
Modified: archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/RepositoriesServiceTest.java
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/RepositoriesServiceTest.java?rev=1200250&r1=1200249&r2=1200250&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/RepositoriesServiceTest.java (original)
+++ archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/RepositoriesServiceTest.java Thu Nov 10 10:04:22 2011
@@ -76,14 +76,8 @@ public class RepositoriesServiceTest
public void deleteArtifactKarmaFailed()
throws Exception
{
- initSourceTargetRepo();
try
{
- File artifactFile =
- new File( "target/test-origin-repo/commons-logging/commons-logging/1.0.1/commons-logging-1.0.1.jar" );
-
- assertTrue( "artifact not exists:" + artifactFile.getPath(), artifactFile.exists() );
-
Artifact artifact = new Artifact();
artifact.setGroupId( "commons-logging" );
artifact.setArtifactId( "commons-logging" );
@@ -100,9 +94,29 @@ public class RepositoriesServiceTest
throw e;
}
- finally
+ }
+
+ @Test( expected = ServerWebApplicationException.class )
+ public void deleteWithRepoNull()
+ throws Exception
+ {
+ try
{
- cleanRepos();
+
+ RepositoriesService repositoriesService = getRepositoriesService( authorizationHeader );
+
+ Artifact artifact = new Artifact();
+ artifact.setGroupId( "commons-logging" );
+ artifact.setArtifactId( "commons-logging" );
+ artifact.setVersion( "1.0.1" );
+ artifact.setPackaging( "jar" );
+
+ repositoriesService.deleteArtifact( artifact, null );
+ }
+ catch ( ServerWebApplicationException e )
+ {
+ assertEquals( "not http 400 status", 400, e.getStatus() );
+ throw e;
}
}