* under the License.
*/
+import javax.xml.bind.annotation.XmlRootElement;
+
/**
* @author Olivier Lamy
* @since 1.4-M1
{
private int httpErrorCode;
+
+ private String errorKey;
+
public ArchivaRestServiceException( String message )
{
{
this.httpErrorCode = httpErrorCode;
}
+
+ public String getErrorKey()
+ {
+ return errorKey;
+ }
+
+ public void setErrorKey( String errorKey )
+ {
+ this.errorKey = errorKey;
+ }
}
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;
{
// 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 );
--- /dev/null
+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;
+ }
+}
--- /dev/null
+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();
+ }
+}
* under the License.
*/
-import org.codehaus.redback.rest.services.RedbackRequestInformation;
-
/**
* @author Olivier Lamy
* @since 1.4-M1
<ref bean="authenticationInterceptor#rest"/>
<ref bean="permissionInterceptor#rest"/>
<ref bean="httpContextThreadLocalInterceptor#rest"/>
+ <ref bean="archivaRestServiceExceptionMapper"/>
</jaxrs:providers>
<jaxrs:serviceBeans>
<ref bean="httpContextThreadLocalCleaner#rest"/>
</jaxrs:outInterceptors>
+ <jaxrs:outFaultInterceptors>
+
+ </jaxrs:outFaultInterceptors>
</jaxrs:server>
</beans>
\ No newline at end of file
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" );
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;
}
}