Fix for bugzilla 394862
diff --git a/org.eclipse.scout.rt.shared/src/org/eclipse/scout/rt/shared/ScoutTexts.java b/org.eclipse.scout.rt.shared/src/org/eclipse/scout/rt/shared/ScoutTexts.java
index 7b2291e..e86ce1c 100644
--- a/org.eclipse.scout.rt.shared/src/org/eclipse/scout/rt/shared/ScoutTexts.java
+++ b/org.eclipse.scout.rt.shared/src/org/eclipse/scout/rt/shared/ScoutTexts.java
@@ -41,7 +41,7 @@
   private final ITextProviderService[] m_textProviders;

 

   public ScoutTexts() {

-    this(SERVICES.getServices(ITextProviderService.class));

+    this(SERVICES.getServicesOrdered(ITextProviderService.class));

   }

 

   public ScoutTexts(ITextProviderService[] textProviders) {

diff --git a/org.eclipse.scout.service/src/org/eclipse/scout/service/SERVICES.java b/org.eclipse.scout.service/src/org/eclipse/scout/service/SERVICES.java
index d45a21d..2a715a6 100644
--- a/org.eclipse.scout.service/src/org/eclipse/scout/service/SERVICES.java
+++ b/org.eclipse.scout.service/src/org/eclipse/scout/service/SERVICES.java
@@ -12,11 +12,14 @@
 

 import java.lang.reflect.Array;

 import java.util.ArrayList;

+import java.util.Arrays;

+import java.util.Comparator;

 

 import org.eclipse.scout.commons.logger.IScoutLogger;

 import org.eclipse.scout.commons.logger.ScoutLogManager;

 import org.eclipse.scout.service.internal.Activator;

 import org.osgi.framework.BundleContext;

+import org.osgi.framework.Constants;

 import org.osgi.framework.InvalidSyntaxException;

 import org.osgi.framework.ServiceReference;

 

@@ -123,8 +126,26 @@
   /**

    * @return the services in order of registration (not by ranking)

    */

-  @SuppressWarnings("unchecked")

   public static <T extends Object> T[] getServices(Class<T> serviceInterfaceClass, String filter) {

+    return getServicesInternal(serviceInterfaceClass, null, false);

+  }

+

+  /**

+   * @return the services in order of ranking

+   */

+  public static <T extends Object> T[] getServicesOrdered(Class<T> serviceInterfaceClass) {

+    return getServicesOrdered(serviceInterfaceClass, null);

+  }

+

+  /**

+   * @return the services in order of ranking

+   */

+  public static <T extends Object> T[] getServicesOrdered(Class<T> serviceInterfaceClass, String filter) {

+    return getServicesInternal(serviceInterfaceClass, null, true);

+  }

+

+  @SuppressWarnings("unchecked")

+  private static <T extends Object> T[] getServicesInternal(Class<T> serviceInterfaceClass, String filter, boolean ordered) {

     Activator a = Activator.getDefault();

     if (a == null || serviceInterfaceClass == null) {

       return (T[]) Array.newInstance(serviceInterfaceClass, 0);

@@ -144,6 +165,14 @@
       // nop

     }

     if (refs != null) {

+      if (ordered) {

+        Arrays.sort(refs, new Comparator<ServiceReference>() {

+          @Override

+          public int compare(ServiceReference ref1, ServiceReference ref2) {

+            return ((Comparable) ref2.getProperty(Constants.SERVICE_RANKING)).compareTo(((Comparable) ref1.getProperty(Constants.SERVICE_RANKING)));

+          }

+        });

+      }

       ArrayList<T> list = new ArrayList<T>(refs.length);

       for (ServiceReference ref : refs) {

         T s = resolveService(serviceInterfaceClass, context, ref);