git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1200250 13f79535-47bb-0310-9956-ffa450edef68tags/archiva-1.4-M2
@@ -18,6 +18,8 @@ package org.apache.archiva.rest.api.services; | |||
* 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; | |||
} | |||
} |
@@ -81,6 +81,8 @@ import org.springframework.stereotype.Service; | |||
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 ); |
@@ -0,0 +1,80 @@ | |||
package org.apache.archiva.rest.services; | |||
/* | |||
* Licensed to the Apache Software Foundation (ASF) under one | |||
* or more contributor license agreements. See the NOTICE file | |||
* distributed with this work for additional information | |||
* regarding copyright ownership. The ASF licenses this file | |||
* to you under the Apache License, Version 2.0 (the | |||
* "License"); you may not use this file except in compliance | |||
* with the License. You may obtain a copy of the License at | |||
* | |||
* http://www.apache.org/licenses/LICENSE-2.0 | |||
* | |||
* Unless required by applicable law or agreed to in writing, | |||
* software distributed under the License is distributed on an | |||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | |||
* KIND, either express or implied. See the License for the | |||
* specific language governing permissions and limitations | |||
* under the License. | |||
*/ | |||
import org.apache.archiva.rest.api.services.ArchivaRestServiceException; | |||
import javax.xml.bind.annotation.XmlRootElement; | |||
/** | |||
* @author Olivier Lamy | |||
* @since 1.4-M2 | |||
*/ | |||
@XmlRootElement( name = "restError" ) | |||
public class RestError | |||
{ | |||
private int httpErrorCode; | |||
private String errorKey; | |||
private String errorMessage; | |||
public RestError() | |||
{ | |||
// no op | |||
} | |||
public RestError( ArchivaRestServiceException e) | |||
{ | |||
httpErrorCode = e.getHttpErrorCode(); | |||
errorKey = e.getErrorKey(); | |||
errorMessage = e.getMessage(); | |||
} | |||
public int getHttpErrorCode() | |||
{ | |||
return httpErrorCode; | |||
} | |||
public void setHttpErrorCode( int httpErrorCode ) | |||
{ | |||
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; | |||
} | |||
} |
@@ -0,0 +1,45 @@ | |||
package org.apache.archiva.rest.services.interceptors; | |||
/* | |||
* Licensed to the Apache Software Foundation (ASF) under one | |||
* or more contributor license agreements. See the NOTICE file | |||
* distributed with this work for additional information | |||
* regarding copyright ownership. The ASF licenses this file | |||
* to you under the Apache License, Version 2.0 (the | |||
* "License"); you may not use this file except in compliance | |||
* with the License. You may obtain a copy of the License at | |||
* | |||
* http://www.apache.org/licenses/LICENSE-2.0 | |||
* | |||
* Unless required by applicable law or agreed to in writing, | |||
* software distributed under the License is distributed on an | |||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | |||
* KIND, either express or implied. See the License for the | |||
* specific language governing permissions and limitations | |||
* under the License. | |||
*/ | |||
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-M2 | |||
*/ | |||
@Provider | |||
@Service( "archivaRestServiceExceptionMapper" ) | |||
public class ArchivaRestServiceExceptionMapper | |||
implements ExceptionMapper<ArchivaRestServiceException> | |||
{ | |||
public Response toResponse( ArchivaRestServiceException e ) | |||
{ | |||
RestError restError = new RestError( e ); | |||
Response.ResponseBuilder responseBuilder = Response.status( e.getHttpErrorCode() ).entity( restError ); | |||
return responseBuilder.build(); | |||
} | |||
} |
@@ -18,8 +18,6 @@ package org.apache.archiva.rest.services.interceptors; | |||
* under the License. | |||
*/ | |||
import org.codehaus.redback.rest.services.RedbackRequestInformation; | |||
/** | |||
* @author Olivier Lamy | |||
* @since 1.4-M1 |
@@ -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> |
@@ -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; | |||
} | |||
} | |||