9.4.3.3. Java client samples

The source code of this tutorial can be found at eXo Samples Repository.

The project is a data injector that runs as a Java standalone application and does the followings:

- create 5 users
- connect everyone together
- create 2 spaces and add everyone
- login as user0 and post a message
- everyone else likes and comments

The project consists of the following components:

Login/Logout

See the login() method in the main class:

public static void login(String username, String password) {

    final String username_ = username;
    final String password_ = password;
    // logout first
    sun.net.www.protocol.http.AuthCacheValue.setAuthCache(new sun.net.www.protocol.http.AuthCacheImpl());
    Authenticator.setDefault(new Authenticator() {
        @Override
        public PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication(username_, password_.toCharArray());
        }
    });
}

The code is explained in Authentication section.

Effective JSON

Read Calendar Rest API tutorial for utilizing Gson. However, unlike Calendar API, with current Social API you generally could not re-use a JSON object between methods. For Create/Update, you need to create "effective" JSON objects that are described in Social data models as JSON entities.

In Java, you should always create a new object, set the values for only "effective" fields before serializing and sending it. Here is an example of updating User - do not use the current user object, neither blind copy all its JSON fields:

User current_user;

current_user = connector.getUser(username);
User to_be_updated_user = new User();
to_be_updated_user.setFullname("A new name");
// format new object to JSON and PUT
String json = (new Gson()).toJson(to_be_updated_user);
connector.updateUser(username, json);

DateTime format

When using parameters after and before of GET /v1/social/users/{username}/activities, you should adjust the local DateTime to UTC and format it to yyyy-MM-dd HH:mm:ss.

Here is the code sample to request activities of the local "today":

Calendar cal = Calendar.getInstance();

cal.set(Calendar.HOUR_OF_DAY, 0);
cal.clear(Calendar.MINUTE);
cal.clear(Calendar.SECOND);
cal.clear(Calendar.MILLISECOND);
Date start_of_day = cal.getTime();
Date end_of_day = new Date(cal.getTimeInMillis() + 1000*60*60*24 -1);
// format dates in "yyyy-MM-dd HH:mm:ss" in UTC timezone
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
df.setTimeZone(TimeZone.getTimeZone("UTC"));
String after = df.format(start_of_day);
String before = df.format(end_of_day);

These query params contain white spaces, so they need to be URL-encoded:

String url = BASE_URL + "/v1/social/users/" + username + "?returnSize=true&offset=" + offset

        + "&after=" + URLEncoder.encode(after, "UTF-8") + "&before=" + URLEncoder.encode(before, "UTF-8");
Copyright ©. All rights reserved. eXo Platform SAS
blog comments powered byDisqus