diff --git a/pom.xml b/pom.xml
index 89bc7c255..257fbc26d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -31,6 +31,7 @@
2.7
+ 2.5.1
@@ -42,6 +43,17 @@
pom
import
+
+
+ org.eclipse.persistence
+ org.eclipse.persistence.moxy
+ ${org.eclipse.persistence.version}
+
+
+ org.eclipse.persistence
+ org.eclipse.persistence.antlr
+ ${org.eclipse.persistence.version}
+
@@ -86,14 +98,14 @@
test
- com.sun.jersey
- jersey-client
- 1.18
+ org.glassfish.jersey.containers
+ jersey-container-grizzly2-http
test
- org.glassfish.jersey.containers
- jersey-container-grizzly2-http
+ org.glassfish.jersey.test-framework.providers
+ jersey-test-framework-provider-bundle
+ pom
test
diff --git a/src/main/java/li/strolch/rest/DefaultStrolchSessionHandler.java b/src/main/java/li/strolch/rest/DefaultStrolchSessionHandler.java
index a28fcd1b6..1d40f24e8 100644
--- a/src/main/java/li/strolch/rest/DefaultStrolchSessionHandler.java
+++ b/src/main/java/li/strolch/rest/DefaultStrolchSessionHandler.java
@@ -20,6 +20,7 @@ import java.util.Map;
import li.strolch.agent.api.ComponentContainer;
import li.strolch.agent.api.StrolchComponent;
+import li.strolch.exception.StrolchException;
import li.strolch.runtime.configuration.ComponentConfiguration;
import li.strolch.runtime.privilege.StrolchPrivilegeHandler;
import ch.eitchnet.privilege.model.Certificate;
@@ -112,10 +113,10 @@ public class DefaultStrolchSessionHandler extends StrolchComponent implements St
certificate = this.certificateMap.get(sessionId);
if (certificate == null)
- throw new RuntimeException("No certificate exists for sessionId " + sessionId);
+ throw new StrolchException("No certificate exists for sessionId " + sessionId);
if (!certificate.getUsername().equals(username) || !certificate.getAuthToken().equals(sessionId)) {
- throw new RuntimeException("Illegal request for username " + username + " and sessionId " + sessionId);
+ throw new StrolchException("Illegal request for username " + username + " and sessionId " + sessionId);
}
this.privilegeHandler.isCertificateValid(certificate);
diff --git a/src/main/java/li/strolch/rest/endpoint/AuthenticationService.java b/src/main/java/li/strolch/rest/endpoint/AuthenticationService.java
index 71110fd15..f26b9366e 100644
--- a/src/main/java/li/strolch/rest/endpoint/AuthenticationService.java
+++ b/src/main/java/li/strolch/rest/endpoint/AuthenticationService.java
@@ -25,6 +25,7 @@ import javax.ws.rs.core.Context;
import javax.ws.rs.core.GenericEntity;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
import li.strolch.exception.StrolchException;
import li.strolch.rest.RestfulStrolchComponent;
@@ -37,6 +38,7 @@ import li.strolch.rest.model.LogoutResult;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import ch.eitchnet.privilege.base.PrivilegeException;
import ch.eitchnet.privilege.model.Certificate;
import ch.eitchnet.utils.helper.StringHelper;
@@ -72,7 +74,7 @@ public class AuthenticationService {
if (sb.length() != 0) {
loginResult.setMsg("Could not log in due to: " + sb.toString());
- return Response.status(401).entity(loginResult).build();
+ return Response.status(Status.UNAUTHORIZED).entity(loginResult).build();
}
StrolchSessionHandler sessionHandler = RestfulStrolchComponent.getInstance().getComponent(
@@ -87,9 +89,11 @@ public class AuthenticationService {
loginResult.setParameters(certificate.getPropertyMap());
return Response.ok().entity(entity).build();
+
} catch (StrolchException e) {
+ logger.error(e.getMessage(), e);
loginResult.setMsg("Could not log in due to: " + e.getMessage());
- return Response.status(401).entity(entity).build();
+ return Response.status(Status.UNAUTHORIZED).entity(entity).build();
} catch (Exception e) {
logger.error(e.getMessage(), e);
String msg = e.getMessage();
@@ -118,14 +122,14 @@ public class AuthenticationService {
StringBuilder sb = new StringBuilder();
if (StringHelper.isEmpty(logoutForm.getUsername())) {
- sb.append("Username was not given. ");
+ sb.append("Username was not given.");
}
if (StringHelper.isEmpty(logoutForm.getSessionId())) {
- sb.append("SessionId was not given. ");
+ sb.append("SessionId was not given.");
}
if (sb.length() != 0) {
logoutResult.setMsg("Could not logout due to: " + sb.toString());
- return Response.status(401).entity(logoutResult).build();
+ return Response.status(Status.UNAUTHORIZED).entity(logoutResult).build();
}
StrolchSessionHandler sessionHandlerHandler = RestfulStrolchComponent.getInstance().getComponent(
@@ -136,6 +140,11 @@ public class AuthenticationService {
sessionHandlerHandler.invalidateSession(origin, certificate);
return Response.ok().entity(entity).build();
+
+ } catch (StrolchException | PrivilegeException e) {
+ logger.error(e.getMessage(), e);
+ logoutResult.setMsg("Could not logout due to: " + e.getMessage());
+ return Response.status(Status.UNAUTHORIZED).entity(entity).build();
} catch (Exception e) {
logger.error(e.getMessage(), e);
String msg = e.getMessage();
diff --git a/src/test/java/li/strolch/rest/inspector/test/AbstractRestfulTest.java b/src/test/java/li/strolch/rest/inspector/test/AbstractRestfulTest.java
index 97bf681eb..327c7b0a3 100644
--- a/src/test/java/li/strolch/rest/inspector/test/AbstractRestfulTest.java
+++ b/src/test/java/li/strolch/rest/inspector/test/AbstractRestfulTest.java
@@ -17,41 +17,37 @@ package li.strolch.rest.inspector.test;
import java.io.File;
import java.net.URI;
+import java.util.HashMap;
+import java.util.Map;
-import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Application;
+import javax.ws.rs.ext.ContextResolver;
-import li.strolch.rest.StrolchRestfulClasses;
-import li.strolch.rest.StrolchRestfulExceptionMapper;
import li.strolch.testbase.runtime.RuntimeMock;
-import org.eclipse.persistence.jaxb.rs.MOXyJsonProvider;
import org.glassfish.grizzly.http.server.HttpServer;
+import org.glassfish.jersey.client.ClientConfig;
import org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpServerFactory;
+import org.glassfish.jersey.moxy.json.MoxyJsonConfig;
import org.glassfish.jersey.server.ResourceConfig;
+import org.glassfish.jersey.test.JerseyTest;
+import org.glassfish.jersey.test.TestProperties;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.sun.jersey.api.client.Client;
-import com.sun.jersey.api.client.ClientResponse;
-import com.sun.jersey.api.client.WebResource;
-import com.sun.jersey.api.client.config.ClientConfig;
-import com.sun.jersey.api.client.config.DefaultClientConfig;
-import com.sun.jersey.api.representation.Form;
-
/**
* @author Robert von Burg
*/
-public abstract class AbstractRestfulTest {
+public abstract class AbstractRestfulTest extends JerseyTest {
- protected static final String BASE_URI = "http://localhost:56789/tutorialwebapp";
+ private static final URI BASE_URI = URI.create("http://localhost:8888/base");
protected static final Logger logger = LoggerFactory.getLogger(AbstractRestfulTest.class);
-
private static final String RUNTIME_PATH = "target/withPrivilegeRuntime/"; //$NON-NLS-1$
private static final String CONFIG_SRC = "src/test/resources/withPrivilegeRuntime"; //$NON-NLS-1$
private static RuntimeMock runtimeMock;
- private static HttpServer httpServer;
+ private static HttpServer server;
@BeforeClass
public static void beforeClass() {
@@ -62,46 +58,37 @@ public abstract class AbstractRestfulTest {
runtimeMock.mockRuntime(rootPath, configSrc);
runtimeMock.startContainer();
- // create a resource config that scans for JAX-RS resources and providers
- // in com.example package
- final ResourceConfig rc = new ResourceConfig();
- for (Class> clazz : StrolchRestfulClasses.getRestfulClasses()) {
- rc.register(clazz);
- rc.register(StrolchRestfulExceptionMapper.class);
- }
-
- httpServer = GrizzlyHttpServerFactory.createHttpServer(URI.create(BASE_URI), rc);
+ server = GrizzlyHttpServerFactory.createHttpServer(BASE_URI, createApp());
}
@AfterClass
public static void afterClass() {
- httpServer.shutdownNow();
+ server.shutdownNow();
runtimeMock.destroyRuntime();
}
- protected WebResource getResource() {
- ClientConfig cc = new DefaultClientConfig();
- cc.getClasses().add(MOXyJsonProvider.class);
- Client client = Client.create(cc);
- WebResource resource = client.resource(BASE_URI);
- return resource;
+ @Override
+ protected Application configure() {
+ enable(TestProperties.LOG_TRAFFIC);
+ enable(TestProperties.DUMP_ENTITY);
+
+ return createApp();
}
- protected ClientResponse doGet(String path) {
- WebResource resource = getResource();
- ClientResponse response = resource.path(path).accept(MediaType.APPLICATION_JSON_TYPE).get(ClientResponse.class);
- if (response.getStatus() != ClientResponse.Status.OK.getStatusCode())
- throw new RuntimeException("Failed to get from path " + path + " due to "
- + response.getEntity(String.class));
- return response;
+ @Override
+ protected void configureClient(ClientConfig config) {
+ config.register(createMoxyJsonResolver());
}
- protected ClientResponse doPostForm(String path, Form form) {
- WebResource resource = getResource();
- ClientResponse response = resource.path(path).type(MediaType.APPLICATION_FORM_URLENCODED)
- .accept(MediaType.APPLICATION_JSON_TYPE).post(ClientResponse.class, form);
- if (response.getStatus() != ClientResponse.Status.OK.getStatusCode())
- throw new RuntimeException("Failed to post to path " + path + " due to " + response.getEntity(String.class));
- return response;
+ public static ResourceConfig createApp() {
+ return new ResourceConfig().packages("li.strolch.rest.endpoint").register(createMoxyJsonResolver());
+ }
+
+ public static ContextResolver createMoxyJsonResolver() {
+ final MoxyJsonConfig moxyJsonConfig = new MoxyJsonConfig();
+ Map namespacePrefixMapper = new HashMap(1);
+ namespacePrefixMapper.put("http://www.w3.org/2001/XMLSchema-instance", "xsi");
+ moxyJsonConfig.setNamespacePrefixMapper(namespacePrefixMapper).setNamespaceSeparator(':');
+ return moxyJsonConfig.resolver();
}
}
diff --git a/src/test/java/li/strolch/rest/inspector/test/AuthenticationTest.java b/src/test/java/li/strolch/rest/inspector/test/AuthenticationTest.java
index 1eaf42d6d..09501eee3 100644
--- a/src/test/java/li/strolch/rest/inspector/test/AuthenticationTest.java
+++ b/src/test/java/li/strolch/rest/inspector/test/AuthenticationTest.java
@@ -18,34 +18,39 @@ package li.strolch.rest.inspector.test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
+
+import javax.ws.rs.client.Entity;
+import javax.ws.rs.core.Form;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
+
import li.strolch.rest.model.LoginResult;
import li.strolch.rest.model.LogoutResult;
-import org.junit.Rule;
import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import com.sun.jersey.api.client.ClientResponse;
-import com.sun.jersey.api.representation.Form;
+//import com.sun.jersey.api.client.ClientResponse;
+//import com.sun.jersey.api.representation.Form;
/**
* @author Robert von Burg
*/
public class AuthenticationTest extends AbstractRestfulTest {
- @Rule
- public ExpectedException exception = ExpectedException.none();
+ private static final String ROOT_PATH = "strolch/authentication";
@Test
public void shouldAuthenticate() {
- Form loginForm = new Form();
- loginForm.add("username", "jill");
- loginForm.add("password", "jill");
-
// login
- ClientResponse loginResponse = doPostForm("/strolch/authentication/login", loginForm);
- LoginResult loginResult = loginResponse.getEntity(LoginResult.class);
+ Form loginForm = new Form();
+ loginForm.param("username", "jill");
+ loginForm.param("password", "jill");
+ Entity