fix problem with xml representation of collections

This commit is contained in:
Sebastian Sdorra
2011-02-16 17:18:00 +01:00
parent 49f0fd5a81
commit 53c0883454
6 changed files with 84 additions and 11 deletions

View File

@@ -60,6 +60,7 @@ import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.CacheControl; import javax.ws.rs.core.CacheControl;
import javax.ws.rs.core.Context; import javax.ws.rs.core.Context;
import javax.ws.rs.core.EntityTag; import javax.ws.rs.core.EntityTag;
import javax.ws.rs.core.GenericEntity;
import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Request; import javax.ws.rs.core.Request;
import javax.ws.rs.core.Response; import javax.ws.rs.core.Response;
@@ -93,6 +94,19 @@ public abstract class AbstractManagerResource<T extends ModelObject,
this.manager = manager; this.manager = manager;
} }
//~--- methods --------------------------------------------------------------
/**
* Method description
*
*
* @param items
*
* @return
*/
protected abstract GenericEntity<Collection<T>> createGenericEntity(
Collection<T> items);
//~--- get methods ---------------------------------------------------------- //~--- get methods ----------------------------------------------------------
/** /**
@@ -271,14 +285,15 @@ public abstract class AbstractManagerResource<T extends ModelObject,
} }
Response response = null; Response response = null;
Object entity = createGenericEntity(items);
if (disableCache) if (disableCache)
{ {
response = Response.ok(items).build(); response = Response.ok(entity).build();
} }
else else
{ {
response = createCacheResponse(request, manager, items); response = createCacheResponse(request, manager, entity);
} }
return response; return response;

View File

@@ -44,7 +44,10 @@ import sonia.scm.group.GroupManager;
//~--- JDK imports ------------------------------------------------------------ //~--- JDK imports ------------------------------------------------------------
import java.util.Collection;
import javax.ws.rs.Path; import javax.ws.rs.Path;
import javax.ws.rs.core.GenericEntity;
/** /**
* *
@@ -73,6 +76,24 @@ public class GroupResource
super(groupManager); super(groupManager);
} }
//~--- methods --------------------------------------------------------------
/**
* Method description
*
*
* @param items
*
* @return
*/
@Override
protected GenericEntity<Collection<Group>> createGenericEntity(
Collection<Group> items)
{
return new GenericEntity<Collection<Group>>(items) {}
;
}
//~--- get methods ---------------------------------------------------------- //~--- get methods ----------------------------------------------------------
/** /**

View File

@@ -58,6 +58,7 @@ import java.util.Collection;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.Path; import javax.ws.rs.Path;
import javax.ws.rs.core.GenericEntity;
/** /**
* *
@@ -99,6 +100,22 @@ public class RepositoryResource
//~--- methods -------------------------------------------------------------- //~--- methods --------------------------------------------------------------
/**
* Method description
*
*
* @param items
*
* @return
*/
@Override
protected GenericEntity<Collection<Repository>> createGenericEntity(
Collection<Repository> items)
{
return new GenericEntity<Collection<Repository>>(items) {}
;
}
/** /**
* Method description * Method description
* *

View File

@@ -50,6 +50,7 @@ import sonia.scm.util.Util;
import java.util.Collection; import java.util.Collection;
import javax.ws.rs.Path; import javax.ws.rs.Path;
import javax.ws.rs.core.GenericEntity;
/** /**
* *
@@ -85,6 +86,22 @@ public class UserResource extends AbstractManagerResource<User, UserException>
//~--- methods -------------------------------------------------------------- //~--- methods --------------------------------------------------------------
/**
* Method description
*
*
* @param items
*
* @return
*/
@Override
protected GenericEntity<Collection<User>> createGenericEntity(
Collection<User> items)
{
return new GenericEntity<Collection<User>>(items) {}
;
}
/** /**
* Method description * Method description
* *

View File

@@ -46,7 +46,6 @@ import static org.junit.Assert.*;
import com.sun.jersey.api.client.Client; import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse; import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource; import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.client.config.ClientConfig;
import com.sun.jersey.client.apache.ApacheHttpClient; import com.sun.jersey.client.apache.ApacheHttpClient;
import com.sun.jersey.client.apache.config.ApacheHttpClientConfig; import com.sun.jersey.client.apache.config.ApacheHttpClientConfig;
import com.sun.jersey.client.apache.config.DefaultApacheHttpClientConfig; import com.sun.jersey.client.apache.config.DefaultApacheHttpClientConfig;
@@ -65,7 +64,10 @@ public class AbstractITCaseBase
/** Field description */ /** Field description */
public static final String BASE_URL = public static final String BASE_URL =
"http://localhost:8081/scm-webapp/api/rest/"; "http://localhost:8080/scm-webapp/api/rest/";
/** Field description */
public static final String EXTENSION = ".xml";
//~--- methods -------------------------------------------------------------- //~--- methods --------------------------------------------------------------
@@ -103,7 +105,7 @@ public class AbstractITCaseBase
*/ */
protected Client createClient() protected Client createClient()
{ {
ClientConfig config = new DefaultApacheHttpClientConfig(); DefaultApacheHttpClientConfig config = new DefaultApacheHttpClientConfig();
config.getProperties().put(ApacheHttpClientConfig.PROPERTY_HANDLE_COOKIES, config.getProperties().put(ApacheHttpClientConfig.PROPERTY_HANDLE_COOKIES,
true); true);
@@ -122,7 +124,7 @@ public class AbstractITCaseBase
*/ */
protected WebResource createResource(Client client, String url) protected WebResource createResource(Client client, String url)
{ {
return client.resource(BASE_URL.concat(url)); return client.resource(BASE_URL.concat(url).concat(EXTENSION));
} }
/** /**
@@ -138,7 +140,7 @@ public class AbstractITCaseBase
protected ClientResponse login(Client client, String username, protected ClientResponse login(Client client, String username,
String password) String password)
{ {
WebResource wr = createResource(client, "authentication/login.json"); WebResource wr = createResource(client, "authentication/login");
MultivaluedMap<String, String> formData = new MultivaluedMapImpl(); MultivaluedMap<String, String> formData = new MultivaluedMapImpl();
formData.add("username", username); formData.add("username", username);
@@ -156,7 +158,7 @@ public class AbstractITCaseBase
*/ */
protected void logout(Client client) protected void logout(Client client)
{ {
WebResource wr = createResource(client, "authentication/logout.json"); WebResource wr = createResource(client, "authentication/logout");
ClientResponse response = wr.get(ClientResponse.class); ClientResponse response = wr.get(ClientResponse.class);
assertNotNull(response); assertNotNull(response);

View File

@@ -89,7 +89,7 @@ public class UserITCase extends AbstractITCaseBase
@Test @Test
public void get() public void get()
{ {
WebResource wr = createResource(client, "users/scmadmin.json"); WebResource wr = createResource(client, "users/scmadmin");
ClientResponse respone = wr.get(ClientResponse.class); ClientResponse respone = wr.get(ClientResponse.class);
assertNotNull(respone); assertNotNull(respone);
@@ -102,11 +102,12 @@ public class UserITCase extends AbstractITCaseBase
/** /**
* Method description * Method description
* @Test *
*/ */
@Test
public void getAll() public void getAll()
{ {
WebResource wr = createResource(client, "users.json"); WebResource wr = createResource(client, "users");
ClientResponse respone = wr.get(ClientResponse.class); ClientResponse respone = wr.get(ClientResponse.class);
assertNotNull(respone); assertNotNull(respone);