Valid KS when using JavaScript, but not Java?

Hello,

I’m working with some test code written in both JavaScript and Java to list our media entries. The code in both cases works fine when using the ADMIN KalturaSessionType & secret, but when I switch to using the USER KalturaSessionType & secret the Java code fails when calling the KalturaMediaService.list(…) method with an exception message about an invalid KS String. The JavaScript code continues to work fine.

Do the two languages use different services?

Is this expected behavior?

Thanks in advance for any information,
F

Hi @garberfc,

Please share you FULL code snippets for both [minus the partner secret, of course], as well as the exact client version being used.

Here are my code examples, running both returns the exact same result.

Java [using http://cdnbakmi.kaltura.com/content/clientlibs/java_22-03-2017.tar.gz]

import java.util.ArrayList;
import com.kaltura.client.enums.*;
import com.kaltura.client.types.*;
import com.kaltura.client.services.*;
import com.kaltura.client.KalturaApiException;
import com.kaltura.client.KalturaClient;
import com.kaltura.client.KalturaConfiguration;
import com.kaltura.client.types.KalturaMediaListResponse;

class CodeExample {
  public static void main(String[] args) {
    try {
      KalturaClient client = CodeExample.generateKalturaClient();
      KalturaMediaEntryFilter filter = new KalturaMediaEntryFilter();
      KalturaFilterPager pager = new KalturaFilterPager();

      KalturaMediaListResponse result = client.getMediaService().list(filter, pager);
                        for (KalturaMediaEntry entry : result.objects) {
                            System.out.println("id:" + entry.id);
                        }
      System.out.println(result);


    } catch (KalturaApiException e) {
      e.printStackTrace();
    }
  }

  public static KalturaClient generateKalturaClient() throws KalturaApiException {
    KalturaConfiguration config = new KalturaConfiguration();
    config.setEndpoint("https://www.kaltura.com/");
    KalturaClient client = new KalturaClient(config);
    String session = client.getSessionService().start(
          partnerUserSecret,
          "",
          KalturaSessionType.USER,
          partnerId);
    client.setKs(session);
    return client;
  }
}

NodeJS [after installing the kaltura npm]

var Kaltura = require('kaltura');
var config = new Kaltura.kc.KalturaConfiguration();
config.serviceUrl = 'https://www.kaltura.com';
var client = new Kaltura.kc.KalturaClient(config);
client.session.start(function(ks) {
    client.setKs(ks);
    var filter = new Kaltura.kc.objects.KalturaMediaEntryFilter();
    filter.orderBy = Kaltura.kc.enums.KalturaMediaEntryOrderBy.WEIGHT_DESC;
    var pager = new Kaltura.kc.objects.KalturaFilterPager();

    client.media.listAction(function(results) {
      if (results && results.code && results.message) {
        console.log('Kaltura Error', results);
      } else {
        console.log('Kaltura Result', results);
      }
    },
    filter,
    pager);

}, partnerUserSecret,
"",
Kaltura.kc.enums.KalturaSessionType.USER,
partnerId)

Hi @jess,

Here’s my code listings…

First the JavaScript, please place inside an html/body set of tags:

<script type="text/javascript">
  
  var partnerId = 2299781;
  var config = new KalturaConfiguration(partnerId);

  config.serviceUrl = 'https://www.kaltura.com';
  var client = new KalturaClient(config);

  KalturaSessionService.start(
        "",
        "garberfc@coolsite.net",
        0,						// 0=User, 2=Admin
        partnerId)
  .execute(client, function(success, ks) {
    if (!success || (ks.code && ks.message)) {
      console.log('Error starting session', success, ks);
    } else {
      console.log('Start succeeded');
      console.log(ks);
      client.setKs(ks);

      KalturaUploadTokenService.listAction().execute(client, function(status, results) {
        console.log('listAction completion fns: status=' + status + ', results=' + results);
        $.each(results.objects, function(index, value) {
          if (value.fileName) {
            console.log('index=' + index + ', filename=' + value.fileName + ', id=' + value.id);
          } else {
            // KalturaUploadTokenService.deleteAction(value.id).execute(client, function(status, results) {
            //  console.log('deleteAction status=' + status);
            // });
          }
        });
      });

    }
  });
</script>

Not the Java code:
import com.espn.kaltura.util.KalturaStatus;
import com.kaltura.client.KalturaApiException;
import com.kaltura.client.KalturaClient;
import com.kaltura.client.KalturaConfiguration;
import com.kaltura.client.enums.KalturaSessionType;
import com.kaltura.client.types.KalturaFilterPager;
import com.kaltura.client.types.KalturaMediaEntry;
import com.kaltura.client.types.KalturaMediaEntryFilter;
import com.kaltura.client.types.KalturaMediaListResponse;

public class TestMediaListNative {

	public static void main(String[] args) {
		
		KalturaClient kalturaClient = null;
		try {
			KalturaConfiguration config = new KalturaConfiguration();
			config.setEndpoint("https://www.kaltura.com");
			kalturaClient = new KalturaClient(config);
			final String ks = kalturaClient.generateSession("", "garberfc@coolsite.net", KalturaSessionType.USER, 2299781);
			kalturaClient.setKs(ks);
			kalturaClient.setSessionId(ks);
			
			KalturaMediaEntryFilter filter = new KalturaMediaEntryFilter();
			filter.statusNotIn = KalturaStatus.STATUS.DELETED.getValue();
			
			KalturaMediaListResponse list = kalturaClient.getMediaService().list(filter, new KalturaFilterPager());
			if (list.totalCount > 0) {
				System.out.println("The account contains " + list.totalCount + " entries matching the filter criteria.");
				for (KalturaMediaEntry entry : list.objects) {
					System.out.println("\t \"" + entry.name + "\", rootEntryId=" + entry.rootEntryId + ", groupId=" + entry.groupId + ", status=" + entry.status);
				}
			} else {
				System.out.println("This account doesn't have any entries in it that match the filter.");
			}
			
			
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if (kalturaClient != null) {
					System.out.println("Ending Session");
					kalturaClient.getSessionService().end();
					System.out.println("Session ended");
				}
			} catch (KalturaApiException e) {
				System.err.println("Error during session end: " + e.getMessage());
			}
		} // finally
	}

}

Again, the JavaScript works, the Java code gives me an invalid KS String. I can email you the secret if you’d like.

Thanks,
F

Hi @jess,

Good news. We have our code working with the KalturaSessionType.USER !

Looking closely at your test code I was able to see the difference in the way you were getting the KS string (session) vs. the way I was.

Here’s your code:
String session = client.getSessionService().start(
partnerUserSecret,
"",
KalturaSessionType.USER,
partnerId);

Here’s my code:
final String ks = kalturaClient.generateSession(secretToUse, userIdToUse, kalturaSessionType, partnerId);

We weren’t using the same call to get the KS string…

Thanks for the help,
Frank