added intermediate object for WorkspaceMessage. Added filter for authentication purpose

git-svn-id: http://svn.research-infrastructures.eu/public/d4science/gcube/trunk/social-networking/social-networking-client-library@163354 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
Costantino Perciante 2018-02-17 17:51:38 +00:00
parent 1272ecae18
commit a9af0c0d3c
12 changed files with 84 additions and 109 deletions

View File

@ -7,7 +7,6 @@ import java.util.ArrayList;
import javax.ws.rs.core.GenericType;
import org.apache.commons.lang.Validate;
import org.gcube.common.authorization.library.provider.SecurityTokenProvider;
import org.gcube.portal.databook.shared.EnhancedFeed;
import org.gcube.portal.social_networking_client_library.utils.HttpClient;
import org.gcube.portal.socialnetworking.model.output.ResponseBean;
@ -44,7 +43,7 @@ public class FullTextSearchClient extends BaseClient{
logger.debug("Request for query " + query + " and from " + from + " and quantity is " + quantity);
String thisMethodSignature = "search-by-query";
String request = getServiceEndpoint() + thisMethodSignature + "?" + "query=" + URLEncoder.encode(query, "UTF-8") + "&from=" + from + "&quantity=" + quantity;
return HttpClient.get(new GenericType<ResponseBean<ArrayList<EnhancedFeed>>>(){}, request, SecurityTokenProvider.instance.get());
return HttpClient.get(new GenericType<ResponseBean<ArrayList<EnhancedFeed>>>(){}, request);
}

View File

@ -5,7 +5,6 @@ import java.util.Map;
import javax.ws.rs.core.GenericType;
import org.gcube.common.authorization.library.provider.SecurityTokenProvider;
import org.gcube.portal.social_networking_client_library.utils.HttpClient;
import org.gcube.portal.socialnetworking.model.output.ResponseBean;
import org.slf4j.Logger;
@ -33,7 +32,7 @@ public class HashTagsClient extends BaseClient{
logger.debug("Request for hastags");
String thisMethodSignature = "get-hashtags-and-occurrences";
String request = getServiceEndpoint() + thisMethodSignature;
return HttpClient.get(new GenericType<ResponseBean<HashMap<String, Integer>>>(){}, request, SecurityTokenProvider.instance.get());
return HttpClient.get(new GenericType<ResponseBean<HashMap<String, Integer>>>(){}, request);
}

View File

@ -6,10 +6,8 @@ import java.util.List;
import javax.ws.rs.core.GenericType;
import org.apache.commons.lang.Validate;
import org.gcube.common.authorization.library.provider.SecurityTokenProvider;
import org.gcube.common.homelibrary.home.workspace.sharing.WorkspaceMessage;
import org.gcube.portal.social_networking_client_library.utils.HttpClient;
import org.gcube.portal.socialnetworking.model.input.MessageInputBean;
import org.gcube.portal.socialnetworking.model.input.Message;
import org.gcube.portal.socialnetworking.model.output.ResponseBean;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -22,50 +20,50 @@ public class MessagesClient extends BaseClient{
private static final String SUB_SERVICE_PATH = "2/messages/";
private static Logger logger = LoggerFactory.getLogger(MessagesClient.class);
public MessagesClient() throws Exception {
super(SUB_SERVICE_PATH);
}
/**
* Get sent messages
* @return
*/
public List<WorkspaceMessage> getSentMessages(){
public List<Message> getSentMessages(){
logger.debug("Request for sent messages");
String thisMethodSignature = "get-sent-messages";
String request = getServiceEndpoint() + thisMethodSignature + "?";
return HttpClient.get(new GenericType<ResponseBean<ArrayList<WorkspaceMessage>>>(){}, request, SecurityTokenProvider.instance.get());
return HttpClient.get(new GenericType<ResponseBean<ArrayList<Message>>>(){}, request);
}
/**
* Get received messages
* @return
*/
public List<WorkspaceMessage> getReceivedMessages(){
public List<Message> getReceivedMessages(){
logger.debug("Request for received messages");
String thisMethodSignature = "get-received-messages";
String request = getServiceEndpoint() + thisMethodSignature + "?";
return HttpClient.get(new GenericType<ResponseBean<ArrayList<WorkspaceMessage>>>(){}, request, SecurityTokenProvider.instance.get());
return HttpClient.get(new GenericType<ResponseBean<ArrayList<Message>>>(){}, request);
}
/**
* Write message
* @return message id
*/
public String writeMessage(MessageInputBean m){
public String writeMessage(Message m){
Validate.isTrue(m != null, "Message cannot be null");
logger.debug("Request for writing new message");
String thisMethodSignature = "write-message";
String request = getServiceEndpoint() + thisMethodSignature + "?";
return HttpClient.post(new GenericType<ResponseBean<String>>(){}, request, SecurityTokenProvider.instance.get(), m);
return HttpClient.post(new GenericType<ResponseBean<String>>(){}, request, m);
}
}

View File

@ -6,7 +6,6 @@ import java.util.List;
import javax.ws.rs.core.GenericType;
import org.apache.commons.lang.Validate;
import org.gcube.common.authorization.library.provider.SecurityTokenProvider;
import org.gcube.portal.databook.shared.Notification;
import org.gcube.portal.social_networking_client_library.utils.HttpClient;
import org.gcube.portal.socialnetworking.model.input.JobNotificationBean;
@ -42,7 +41,7 @@ public class NotificationsClient extends BaseClient{
logger.debug("Request for getting notifications");
String thisMethodSignature = "get-range-notifications";
String request = getServiceEndpoint() + thisMethodSignature + "?from=" + from + "&quantity=" +quantity;
return HttpClient.get(new GenericType<ResponseBean<ArrayList<Notification>>>(){}, request, SecurityTokenProvider.instance.get());
return HttpClient.get(new GenericType<ResponseBean<ArrayList<Notification>>>(){}, request);
}
@ -57,7 +56,7 @@ public class NotificationsClient extends BaseClient{
logger.debug("Request for getting notifications");
String thisMethodSignature = "notify-job-status";
String request = getServiceEndpoint() + thisMethodSignature;
HttpClient.post(new GenericType<ResponseBean<String>>(){}, request, SecurityTokenProvider.instance.get(), notification);
HttpClient.post(new GenericType<ResponseBean<String>>(){}, request, notification);
}

View File

@ -2,7 +2,6 @@ package org.gcube.portal.social_networking_client_library;
import javax.ws.rs.core.GenericType;
import org.gcube.common.authorization.library.provider.SecurityTokenProvider;
import org.gcube.portal.social_networking_client_library.utils.HttpClient;
import org.gcube.portal.socialnetworking.model.output.ResponseBean;
import org.json.JSONObject;
@ -32,7 +31,7 @@ public class PeopleClient extends BaseClient{
logger.debug("Request for getting profile");
String thisMethodSignature = "profile";
String request = getServiceEndpoint() + thisMethodSignature;
return HttpClient.get(new GenericType<ResponseBean<JSONObject>>(){}, request, SecurityTokenProvider.instance.get());
return HttpClient.get(new GenericType<ResponseBean<JSONObject>>(){}, request);
}
}

View File

@ -6,7 +6,6 @@ import java.util.List;
import javax.ws.rs.core.GenericType;
import org.apache.commons.lang.Validate;
import org.gcube.common.authorization.library.provider.SecurityTokenProvider;
import org.gcube.portal.databook.shared.Feed;
import org.gcube.portal.social_networking_client_library.utils.HttpClient;
import org.gcube.portal.socialnetworking.model.input.PostInputBean;
@ -39,7 +38,7 @@ public class PostsClient extends BaseClient{
logger.debug("Request for getting posts");
String thisMethodSignature = "get-posts-user-since";
String request = getServiceEndpoint() + thisMethodSignature;
return HttpClient.get(new GenericType<ResponseBean<ArrayList<Feed>>>(){}, request, SecurityTokenProvider.instance.get());
return HttpClient.get(new GenericType<ResponseBean<ArrayList<Feed>>>(){}, request);
}
@ -54,7 +53,7 @@ public class PostsClient extends BaseClient{
logger.debug("Request for getting posts");
String thisMethodSignature = "get-posts-user";
String request = getServiceEndpoint() + thisMethodSignature;
return HttpClient.get(new GenericType<ResponseBean<ArrayList<Feed>>>(){}, request, SecurityTokenProvider.instance.get());
return HttpClient.get(new GenericType<ResponseBean<ArrayList<Feed>>>(){}, request);
}
@ -69,7 +68,7 @@ public class PostsClient extends BaseClient{
logger.debug("Request for getting posts");
String thisMethodSignature = "get-posts-user-quantity";
String request = getServiceEndpoint() + thisMethodSignature;
return HttpClient.get(new GenericType<ResponseBean<ArrayList<Feed>>>(){}, request, SecurityTokenProvider.instance.get());
return HttpClient.get(new GenericType<ResponseBean<ArrayList<Feed>>>(){}, request);
}
@ -84,7 +83,7 @@ public class PostsClient extends BaseClient{
logger.debug("Request for writing post");
String thisMethodSignature = "write-post-user";
String request = getServiceEndpoint() + thisMethodSignature;
return HttpClient.post(new GenericType<ResponseBean<Feed>>(){}, request, SecurityTokenProvider.instance.get(), toWrite);
return HttpClient.post(new GenericType<ResponseBean<Feed>>(){}, request, toWrite);
}
@ -97,7 +96,7 @@ public class PostsClient extends BaseClient{
logger.debug("Request for getting posts");
String thisMethodSignature = "get-posts-app";
String request = getServiceEndpoint() + thisMethodSignature;
return HttpClient.get(new GenericType<ResponseBean<ArrayList<Feed>>>(){}, request, SecurityTokenProvider.instance.get());
return HttpClient.get(new GenericType<ResponseBean<ArrayList<Feed>>>(){}, request);
}
@ -112,7 +111,7 @@ public class PostsClient extends BaseClient{
logger.debug("Request for writing application post");
String thisMethodSignature = "write-post-app";
String request = getServiceEndpoint() + thisMethodSignature;
return HttpClient.post(new GenericType<ResponseBean<Feed>>(){}, request, SecurityTokenProvider.instance.get(), toWrite);
return HttpClient.post(new GenericType<ResponseBean<Feed>>(){}, request, toWrite);
}
@ -125,7 +124,7 @@ public class PostsClient extends BaseClient{
logger.debug("Request for getting posts vre");
String thisMethodSignature = "get-posts-vre";
String request = getServiceEndpoint() + thisMethodSignature;
return HttpClient.get(new GenericType<ResponseBean<ArrayList<Feed>>>(){}, request, SecurityTokenProvider.instance.get());
return HttpClient.get(new GenericType<ResponseBean<ArrayList<Feed>>>(){}, request);
}
@ -140,7 +139,7 @@ public class PostsClient extends BaseClient{
logger.debug("Request for getting posts with hashtag " + hashtag);
String thisMethodSignature = "get-posts-by-hashtag";
String request = getServiceEndpoint() + thisMethodSignature;
return HttpClient.get(new GenericType<ResponseBean<ArrayList<Feed>>>(){}, request, SecurityTokenProvider.instance.get());
return HttpClient.get(new GenericType<ResponseBean<ArrayList<Feed>>>(){}, request);
}
@ -153,7 +152,7 @@ public class PostsClient extends BaseClient{
logger.debug("Request for getting posts liked");
String thisMethodSignature = "get-liked-posts";
String request = getServiceEndpoint() + thisMethodSignature;
return HttpClient.get(new GenericType<ResponseBean<ArrayList<Feed>>>(){}, request, SecurityTokenProvider.instance.get());
return HttpClient.get(new GenericType<ResponseBean<ArrayList<Feed>>>(){}, request);
}
@ -166,7 +165,7 @@ public class PostsClient extends BaseClient{
logger.debug("Request for getting posts liked");
String thisMethodSignature = "get-id-liked-posts";
String request = getServiceEndpoint() + thisMethodSignature;
return HttpClient.get(new GenericType<ResponseBean<ArrayList<String>>>(){}, request, SecurityTokenProvider.instance.get());
return HttpClient.get(new GenericType<ResponseBean<ArrayList<String>>>(){}, request);
}

View File

@ -3,7 +3,6 @@ package org.gcube.portal.social_networking_client_library;
import javax.ws.rs.core.GenericType;
import org.apache.commons.lang.Validate;
import org.gcube.common.authorization.library.provider.SecurityTokenProvider;
import org.gcube.portal.social_networking_client_library.utils.HttpClient;
import org.gcube.portal.socialnetworking.model.input.ApplicationId;
import org.gcube.portal.socialnetworking.model.output.ResponseBean;
@ -35,7 +34,7 @@ public class TokensClient extends BaseClient{
logger.debug("Request for writing new message");
String thisMethodSignature = "generate-application-token";
String request = getServiceEndpoint() + thisMethodSignature + "?";
return HttpClient.post(new GenericType<ResponseBean<String>>(){}, request, SecurityTokenProvider.instance.get(), appId);
return HttpClient.post(new GenericType<ResponseBean<String>>(){}, request, appId);
}

View File

@ -8,7 +8,6 @@ import java.util.Map;
import javax.ws.rs.core.GenericType;
import org.apache.commons.lang.Validate;
import org.gcube.common.authorization.library.provider.SecurityTokenProvider;
import org.gcube.portal.social_networking_client_library.utils.HttpClient;
import org.gcube.portal.socialnetworking.model.output.ResponseBean;
import org.json.JSONObject;
@ -40,7 +39,7 @@ public class UsersClient extends BaseClient{
logger.debug("Request for attribute value");
String thisMethodSignature = "get-custom-attribute";
String request = getServiceEndpoint() + thisMethodSignature + "?attribute=" + attributeKey;
return HttpClient.get(new GenericType<ResponseBean<String>>(){}, request, SecurityTokenProvider.instance.get());
return HttpClient.get(new GenericType<ResponseBean<String>>(){}, request);
}
@ -53,7 +52,7 @@ public class UsersClient extends BaseClient{
logger.debug("Request for fullname");
String thisMethodSignature = "get-fullname";
String request = getServiceEndpoint() + thisMethodSignature;
return HttpClient.get(new GenericType<ResponseBean<String>>(){}, request, SecurityTokenProvider.instance.get());
return HttpClient.get(new GenericType<ResponseBean<String>>(){}, request);
}
@ -66,7 +65,7 @@ public class UsersClient extends BaseClient{
logger.debug("Request for email");
String thisMethodSignature = "get-email";
String request = getServiceEndpoint() + thisMethodSignature;
return HttpClient.get(new GenericType<ResponseBean<String>>(){}, request, SecurityTokenProvider.instance.get());
return HttpClient.get(new GenericType<ResponseBean<String>>(){}, request);
}
@ -79,7 +78,7 @@ public class UsersClient extends BaseClient{
logger.debug("Request for getting profile");
String thisMethodSignature = "get-profile";
String request = getServiceEndpoint() + thisMethodSignature;
return HttpClient.get(new GenericType<ResponseBean<JSONObject>>(){}, request, SecurityTokenProvider.instance.get());
return HttpClient.get(new GenericType<ResponseBean<JSONObject>>(){}, request);
}
@ -92,7 +91,7 @@ public class UsersClient extends BaseClient{
logger.debug("Request for getting usernames in this context");
String thisMethodSignature = "get-all-usernames";
String request = getServiceEndpoint() + thisMethodSignature;
return HttpClient.get(new GenericType<ResponseBean<ArrayList<String>>>(){}, request, SecurityTokenProvider.instance.get());
return HttpClient.get(new GenericType<ResponseBean<ArrayList<String>>>(){}, request);
}
@ -105,7 +104,7 @@ public class UsersClient extends BaseClient{
logger.debug("Request for getting usernames and fullnames in this context");
String thisMethodSignature = "get-all-fullnames-and-usernames";
String request = getServiceEndpoint() + thisMethodSignature;
return HttpClient.get(new GenericType<ResponseBean<HashMap<String, String>>>(){}, request, SecurityTokenProvider.instance.get());
return HttpClient.get(new GenericType<ResponseBean<HashMap<String, String>>>(){}, request);
}
@ -120,7 +119,7 @@ public class UsersClient extends BaseClient{
logger.debug("Request for getting usernames with global role");
String thisMethodSignature = "get-usernames-by-global-role";
String request = getServiceEndpoint() + thisMethodSignature + "?role-name=" + globalRole;
return HttpClient.get(new GenericType<ResponseBean<ArrayList<String>>>(){}, request, SecurityTokenProvider.instance.get());
return HttpClient.get(new GenericType<ResponseBean<ArrayList<String>>>(){}, request);
}
@ -135,7 +134,7 @@ public class UsersClient extends BaseClient{
logger.debug("Request for getting usernames with global role");
String thisMethodSignature = "get-usernames-by-role";
String request = getServiceEndpoint() + thisMethodSignature + "?role-name=" + localRole;
return HttpClient.get(new GenericType<ResponseBean<ArrayList<String>>>(){}, request, SecurityTokenProvider.instance.get());
return HttpClient.get(new GenericType<ResponseBean<ArrayList<String>>>(){}, request);
}
@ -150,7 +149,7 @@ public class UsersClient extends BaseClient{
logger.debug("Request for getting usernames with global role");
String thisMethodSignature = "user-exists";
String request = getServiceEndpoint() + thisMethodSignature + "?username=" + username;
return HttpClient.get(new GenericType<ResponseBean<Boolean>>(){}, request, SecurityTokenProvider.instance.get());
return HttpClient.get(new GenericType<ResponseBean<Boolean>>(){}, request);
}

View File

@ -2,7 +2,6 @@ package org.gcube.portal.social_networking_client_library;
import javax.ws.rs.core.GenericType;
import org.gcube.common.authorization.library.provider.SecurityTokenProvider;
import org.gcube.portal.social_networking_client_library.utils.HttpClient;
import org.gcube.portal.socialnetworking.model.output.ResponseBean;
import org.json.JSONArray;
@ -32,7 +31,7 @@ public class VREsClient extends BaseClient{
logger.debug("Request for writing new message");
String thisMethodSignature = "get-my-vres";
String request = getServiceEndpoint() + thisMethodSignature + "?";
return HttpClient.get(new GenericType<ResponseBean<JSONArray>>(){}, request, SecurityTokenProvider.instance.get());
return HttpClient.get(new GenericType<ResponseBean<JSONArray>>(){}, request);
}

View File

@ -0,0 +1,21 @@
package org.gcube.portal.social_networking_client_library.filter;
import java.io.IOException;
import javax.ws.rs.client.ClientRequestContext;
import org.gcube.common.authorization.library.provider.SecurityTokenProvider;
/**
* Authorization filter for the jersey client.
* @author Costantino Perciante at ISTI-CNR (costantino.perciante@isti.cnr.it)
*/
public class AuthorizationFilter {
private final static String AUTH_TOKEN_PARAMETER = "gcube-token";
public void filter(ClientRequestContext clientRequestContext) throws IOException {
String token = SecurityTokenProvider.instance.get();
clientRequestContext.getHeaders().add(AUTH_TOKEN_PARAMETER, token);
}
}

View File

@ -8,6 +8,7 @@ import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.GenericType;
import javax.ws.rs.core.MediaType;
import org.gcube.portal.social_networking_client_library.filter.AuthorizationFilter;
import org.gcube.portal.socialnetworking.model.output.ResponseBean;
import org.glassfish.jersey.client.ClientConfig;
import org.glassfish.jersey.jackson.JacksonFeature;
@ -34,13 +35,13 @@ public class HttpClient{
* @param token
* @return
*/
public static <R> R get(GenericType<ResponseBean<R>> returnType, String requestUrl, String token){
public static <R> R get(GenericType<ResponseBean<R>> returnType, String requestUrl){
logger.debug("Executing get request at url " + requestUrl + " and token is " + maskedToken(token));
logger.debug("Executing get request at url " + requestUrl);
ClientConfig cc = new ClientConfig().register(new JacksonFeature());//.register(new JacksonJsonProvider(getMapper()));
ClientConfig cc = new ClientConfig().register(new JacksonFeature()).register(new AuthorizationFilter());
Client client = ClientBuilder.newClient(cc);
WebTarget webResourceGet = client.target(requestUrl).queryParam("gcube-token", token);
WebTarget webResourceGet = client.target(requestUrl);
ResponseBean<R> response = webResourceGet.request(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON).get(returnType);
if(response == null)
@ -53,15 +54,6 @@ public class HttpClient{
return response.getResult();
}
// public static ObjectMapper getMapper(){
//
// ObjectMapper mapper = new ObjectMapper();
// mapper.enable(SerializationFeature.INDENT_OUTPUT);
// mapper.addMixIn(WorkspaceMessage.class, MessageOutputBeanMixIn.class);
// mapper.setPropertyNamingStrategy(PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES);
// return mapper;
// }
/**
* Executes a post request
* @param returnType
@ -71,25 +63,13 @@ public class HttpClient{
* @return
* @throws JsonProcessingException
*/
public static <R> R post(GenericType<ResponseBean<R>> returnType, String requestUrl, String token, Object obj){
public static <R> R post(GenericType<ResponseBean<R>> returnType, String requestUrl, Object obj){
logger.debug("Executing post request at url " + requestUrl + " and token is " + maskedToken(token));
logger.debug("Executing post request at url " + requestUrl);
ClientConfig cc = new ClientConfig().register(new JacksonFeature());
ClientConfig cc = new ClientConfig().register(new JacksonFeature()).register(new AuthorizationFilter());
Client client = ClientBuilder.newClient(cc);
WebTarget webResourceGet = client.target(requestUrl).queryParam("gcube-token", token);
//
// String asJson = null;
// try{
// ObjectMapper mapper = new ObjectMapper();
// mapper.enable(SerializationFeature.INDENT_OUTPUT);
// mapper.setPropertyNamingStrategy(PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES);
// mapper.configure(SerializationFeature.WRITE_ENUMS_USING_TO_STRING, true);
// asJson = mapper.writeValueAsString(obj);
// logger.debug("Request body looks like\n"+asJson);
// }catch(Exception e){
// logger.error("Failed to parse data", e);
// }
WebTarget webResourceGet = client.target(requestUrl);
logger.debug("Entity looks like " + Entity.json(obj));
@ -104,19 +84,4 @@ public class HttpClient{
return response.getResult();
}
/**
* Avoid to show the token
* @param token
* @return
*/
private static String maskedToken(String token){
if(token == null)
return "";
else
return token.substring(0, 5) + "**************************";
}
}

View File

@ -7,13 +7,12 @@ import java.util.Map;
import java.util.UUID;
import org.gcube.common.authorization.library.provider.SecurityTokenProvider;
import org.gcube.common.homelibrary.home.workspace.sharing.WorkspaceMessage;
import org.gcube.common.scope.api.ScopeProvider;
import org.gcube.portal.databook.shared.EnhancedFeed;
import org.gcube.portal.databook.shared.JobStatusType;
import org.gcube.portal.databook.shared.Notification;
import org.gcube.portal.socialnetworking.model.input.JobNotificationBean;
import org.gcube.portal.socialnetworking.model.input.MessageInputBean;
import org.gcube.portal.socialnetworking.model.input.Message;
import org.gcube.portal.socialnetworking.model.input.Recipient;
import org.junit.After;
import org.junit.Before;
@ -63,27 +62,27 @@ public class TestClientServices {
@Test
public void testMessagesReceived() throws Exception {
MessagesClient messagesClient = new MessagesClient();
List<WorkspaceMessage> receivedMessages = messagesClient.getReceivedMessages();
for (WorkspaceMessage workspaceMessage : receivedMessages) {
List<Message> receivedMessages = messagesClient.getReceivedMessages();
for (Message workspaceMessage : receivedMessages) {
logger.debug("Received message " + workspaceMessage.toString());
}
}
//@Test
public void testMessagesSent() throws Exception {
MessagesClient messagesClient = new MessagesClient();
List<WorkspaceMessage> sentMessages = messagesClient.getSentMessages();
for (WorkspaceMessage workspaceMessage : sentMessages) {
List<Message> sentMessages = messagesClient.getSentMessages();
for (Message workspaceMessage : sentMessages) {
logger.debug("Sent message was " + workspaceMessage);
}
}
//@Test
public void sendMessage() throws Exception{
logger.debug("Sending message ");
MessagesClient messagesClient = new MessagesClient();
List<Recipient> rec = Arrays.asList(new Recipient("andrea.rossi"));
MessageInputBean message = new MessageInputBean(
Message message = new Message(
"Test message",
"Sending message via client " + System.currentTimeMillis(),
new ArrayList<Recipient>(rec));
@ -113,7 +112,7 @@ public class TestClientServices {
notificationsClient.sendJobNotification(notification);
logger.debug("Sent job notification ");
}
@After
public void reset(){
ScopeProvider.instance.reset();