package com.bpedman.osgisample.entity.rest; import aQute.bnd.annotation.component.Activate; import aQute.bnd.annotation.component.Component; import aQute.bnd.annotation.component.Deactivate; import aQute.bnd.annotation.component.Reference; import com.bpedman.osgisample.entity.Entity; import com.bpedman.osgisample.entity.EntityService; import org.apache.cxf.endpoint.Server; import org.apache.cxf.jaxrs.JAXRSServerFactoryBean; import org.apache.cxf.jaxrs.lifecycle.SingletonResourceProvider; import org.codehaus.jackson.jaxrs.JacksonJsonProvider; import javax.jws.WebService; import javax.ws.rs.Consumes; import javax.ws.rs.DELETE; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.PUT; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import java.util.Collection; /** * User: bpedersen * Date: 8/5/13 */ @WebService @Path("/") @Component( name = "EntityServiceRest", immediate = true ) public class EntityServiceRest { private EntityService entityService; private Server server = null; @Reference public void setEntityService(EntityService entityService) { this.entityService = entityService; } public void unsetEntityService(EntityService entityService) { this.entityService = null; } @Activate public void activate() { JAXRSServerFactoryBean sf = new JAXRSServerFactoryBean(); sf.setResourceClasses(getClass()); sf.setResourceProvider(getClass(), new SingletonResourceProvider(this)); sf.setAddress("/entity"); sf.setProvider(new JacksonJsonProvider()); server = sf.create(); } @Deactivate public void deactivate() { if (server != null) { server.stop(); server.destroy(); } } @GET @Path("{id}") @Produces(MediaType.APPLICATION_JSON) public Response getUser(@PathParam("id") String id) { Entity user = entityService.getUser(id); if (user != null) { return Response.ok(user).build(); } else { return Response.status(Response.Status.NOT_FOUND).build(); } } @POST @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) public Response addUser(Entity user) { return Response.ok(entityService.addUser(user)).build(); } @PUT @Consumes(MediaType.APPLICATION_JSON) @Path("{id}") public Response updateUser(@PathParam("id") String id, Entity user) { Entity entity = entityService.updateUser(id, user); return Response.ok(entity).build(); } @DELETE @Path("{id}") public Response deleteUser(@PathParam("id") String id) { entityService.deleteUser(id); return Response.noContent().build(); } @GET @Produces(MediaType.APPLICATION_JSON) public Collection<Entity> getUsers() { return entityService.getUsers(); } }