-----
- REST call
+ REST Services
-----
Olivier Lamy
-----
Expose Rest Services
- The {{http://cxf.apache.org}Apache CXF}} is used to expose some classes/methods as REST Services.
+
+ The {{{http://cxf.apache.org}Apache CXF}} is used to expose some classes/methods as REST Services.
Services use the standard interface/implementation pattern:
[]
-* Annotations
+%{toc}
+
+* Steps to expose your class as a REST Service.
+
+ Here all the steps to expose a new class as a REST service.
+
+** Interface and data beans
+
+ All interfaces and data beans are added in the module archiva-rest-api:
+
+ * interface in the package: org.apache.archiva.rest.api.services .
-** Beans
+ * data beans in the package: org.apache.archiva.rest.api.model .
+
+ []
+
+*** Beans
As we want to be able to expose result as json or xml type, all beans use javax.xml.bind.annotation root element :
@XmlRootElement( name = "artifact" )
public class Artifact
implements Serializable
+
+All services will be able to return json or xml
+@Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML } )
+---------------------
-** JAXRS annotations
+*** JAXRS annotations
As we use interfaces/implementations pattern jaxrs annotations are only in interfaces level.
@Path( "/managedRepositoriesService/" )
public interface ManagedRepositoriesService
{
+ // simple GET method no parameter
@Path( "getManagedRepositories" )
@GET
@Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML } )
List<ManagedRepository> getManagedRepositories()
throws ArchivaRestServiceException;
+
+ // GET method with a path parameter
+ @Path( "getManagedRepository/{repositoryId}" )
+ @GET
+ @Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML } )
+ @RedbackAuthorization( permissions = ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION )
+ ManagedRepository getManagedRepository( @PathParam( "repositoryId" ) String repositoryId )
+ throws ArchivaRestServiceException;
+
+ // POST method to pass a data bean
+ @Path( "addManagedRepository" )
+ @POST
+ @Consumes( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML } )
+ @Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML } )
+ @RedbackAuthorization( permissions = ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION )
+ ManagedRepository addManagedRepository( ManagedRepository managedRepository )
+ throws ArchivaRestServiceException;
+---------------------
** CXF/Spring configuration
+
+