Author: [email protected]
Date: Mon Aug  8 17:04:56 2011
New Revision: 1295

Log:
[AMDATUOPENSOCIAL-81] Fixed NullPointerException once the XML is not loaded in 
the cache since it could not be found (404)

Modified:
   
trunk/amdatu-opensocial/opensocial-shindig/src/main/java/org/amdatu/opensocial/shindig/service/ShindigOpenSocialContainerImpl.java

Modified: 
trunk/amdatu-opensocial/opensocial-shindig/src/main/java/org/amdatu/opensocial/shindig/service/ShindigOpenSocialContainerImpl.java
==============================================================================
--- 
trunk/amdatu-opensocial/opensocial-shindig/src/main/java/org/amdatu/opensocial/shindig/service/ShindigOpenSocialContainerImpl.java
  (original)
+++ 
trunk/amdatu-opensocial/opensocial-shindig/src/main/java/org/amdatu/opensocial/shindig/service/ShindigOpenSocialContainerImpl.java
  Mon Aug  8 17:04:56 2011
@@ -15,42 +15,42 @@
  */
 package org.amdatu.opensocial.shindig.service;
 
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.net.URL;
-import java.net.URLConnection;
-import java.nio.charset.Charset;
-import java.util.HashMap;
-import java.util.Locale;
-import java.util.Map;
-import java.util.concurrent.Callable;
-import java.util.concurrent.CancellationException;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.FutureTask;
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.amdatu.auth.tokenprovider.InvalidTokenException;
-import org.amdatu.auth.tokenprovider.TokenProvider;
-import org.amdatu.auth.tokenprovider.TokenProviderException;
-import org.amdatu.core.tenant.Tenant;
-import org.amdatu.opensocial.gadgetmanagement.OpenSocialContainer;
-import org.apache.felix.dm.Component;
-import org.apache.felix.dm.DependencyManager;
-import org.apache.shindig.auth.BlobCrypterSecurityToken;
-import org.apache.shindig.common.crypto.BasicBlobCrypter;
-import org.apache.shindig.common.crypto.BlobCrypterException;
-import org.apache.shindig.common.uri.Uri;
-import org.apache.shindig.common.util.Utf8UrlCoder;
-import org.apache.shindig.gadgets.spec.GadgetSpec;
-import org.apache.shindig.gadgets.spec.LocaleSpec;
-import org.apache.shindig.gadgets.spec.MessageBundle;
-import org.apache.shindig.gadgets.variables.Substitutions;
-import org.osgi.framework.Constants;
-import org.osgi.service.log.LogService;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.URL;
+import java.net.URLConnection;
+import java.nio.charset.Charset;
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
+import java.util.concurrent.Callable;
+import java.util.concurrent.CancellationException;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.FutureTask;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.amdatu.auth.tokenprovider.InvalidTokenException;
+import org.amdatu.auth.tokenprovider.TokenProvider;
+import org.amdatu.auth.tokenprovider.TokenProviderException;
+import org.amdatu.core.tenant.Tenant;
+import org.amdatu.opensocial.gadgetmanagement.OpenSocialContainer;
+import org.apache.felix.dm.Component;
+import org.apache.felix.dm.DependencyManager;
+import org.apache.shindig.auth.BlobCrypterSecurityToken;
+import org.apache.shindig.common.crypto.BasicBlobCrypter;
+import org.apache.shindig.common.crypto.BlobCrypterException;
+import org.apache.shindig.common.uri.Uri;
+import org.apache.shindig.common.util.Utf8UrlCoder;
+import org.apache.shindig.gadgets.spec.GadgetSpec;
+import org.apache.shindig.gadgets.spec.LocaleSpec;
+import org.apache.shindig.gadgets.spec.MessageBundle;
+import org.apache.shindig.gadgets.variables.Substitutions;
+import org.osgi.framework.Constants;
+import org.osgi.service.log.LogService;
 
 /**
  * Shindig implementation of the OpenSocialContainer interface.
@@ -132,48 +132,53 @@
         Map<String, String> gadgetSpec = new HashMap<String, String>();
         try {
             m_logService.log(LogService.LOG_DEBUG, "Retrieving gadgetspec for 
'" + gadgetUrl + "'");
-            String xml = loadXMLFromCache(new URL(gadgetUrl));
-            GadgetSpec spec = new GadgetSpec(Uri.parse(gadgetUrl), xml);
-
-            // Perform message substitution if locales are available
-            Map<Locale, LocaleSpec> locales = 
spec.getModulePrefs().getLocales();
-            if (locales != null && locales.size() > 0) {
-                // TODO: replace this with users locale
-                Locale defaultLocale = Locale.getDefault();
-                Locale locale = getPreferredLocale(defaultLocale, locales);
-
-                // First replace messages with the preferred language labels
-                String messageXML = internalLoadXML(new 
URL(locales.get(locale).getMessages().toString()));
-                MessageBundle bundle = new MessageBundle(locales.get(locale), 
messageXML);
-                Substitutions substituter = new Substitutions();
-                substituter.addSubstitutions(Substitutions.Type.MESSAGE, 
bundle.getMessages());
-                spec = spec.substitute(substituter);
-
-                // Replace the remaining messages with 'all' messages
-                locale = getPreferredLocale(new Locale("all", "all"), locales);
-                messageXML = internalLoadXML(new 
URL(locales.get(locale).getMessages().toString()));
-                bundle = new MessageBundle(locales.get(locale), messageXML);
-                substituter = new Substitutions();
-                substituter.addSubstitutions(Substitutions.Type.MESSAGE, 
bundle.getMessages());
-                spec = spec.substitute(substituter);
-            }
-
-            // Copy attributes
-            gadgetSpec.put("title", spec.getModulePrefs().getTitle());
-            gadgetSpec.put("description", 
spec.getModulePrefs().getDescription());
-            gadgetSpec.put("author", spec.getModulePrefs().getAuthor());
-            gadgetSpec.put("title_url", 
spec.getModulePrefs().getTitleUrl().toString());
-
-            if (spec.getModulePrefs().getScreenshot() != null
-                && 
!spec.getModulePrefs().getScreenshot().toString().isEmpty()) {
-                gadgetSpec.put("screenshot", 
spec.getModulePrefs().getScreenshot().toString());
-            }
-            else {
-                gadgetSpec.put("screenshot", request.getContextPath() + "/"
-                    + "/static/images/defaultgadget.png");
+            String xml = loadXMLFromCache(new URL(gadgetUrl));
+            if (xml != null) {
+                GadgetSpec spec = new GadgetSpec(Uri.parse(gadgetUrl), xml);
+    
+                // Perform message substitution if locales are available
+                Map<Locale, LocaleSpec> locales = 
spec.getModulePrefs().getLocales();
+                if (locales != null && locales.size() > 0) {
+                    // TODO: replace this with users locale
+                    Locale defaultLocale = Locale.getDefault();
+                    Locale locale = getPreferredLocale(defaultLocale, locales);
+    
+                    // First replace messages with the preferred language 
labels
+                    String messageXML = internalLoadXML(new 
URL(locales.get(locale).getMessages().toString()));
+                    MessageBundle bundle = new 
MessageBundle(locales.get(locale), messageXML);
+                    Substitutions substituter = new Substitutions();
+                    substituter.addSubstitutions(Substitutions.Type.MESSAGE, 
bundle.getMessages());
+                    spec = spec.substitute(substituter);
+    
+                    // Replace the remaining messages with 'all' messages
+                    locale = getPreferredLocale(new Locale("all", "all"), 
locales);
+                    messageXML = internalLoadXML(new 
URL(locales.get(locale).getMessages().toString()));
+                    bundle = new MessageBundle(locales.get(locale), 
messageXML);
+                    substituter = new Substitutions();
+                    substituter.addSubstitutions(Substitutions.Type.MESSAGE, 
bundle.getMessages());
+                    spec = spec.substitute(substituter);
+                }
+    
+                // Copy attributes
+                gadgetSpec.put("title", spec.getModulePrefs().getTitle());
+                gadgetSpec.put("description", 
spec.getModulePrefs().getDescription());
+                gadgetSpec.put("author", spec.getModulePrefs().getAuthor());
+                gadgetSpec.put("title_url", 
spec.getModulePrefs().getTitleUrl().toString());
+    
+                if (spec.getModulePrefs().getScreenshot() != null
+                    && 
!spec.getModulePrefs().getScreenshot().toString().isEmpty()) {
+                    gadgetSpec.put("screenshot", 
spec.getModulePrefs().getScreenshot().toString());
+                }
+                else {
+                    gadgetSpec.put("screenshot", request.getContextPath() + "/"
+                        + "/static/images/defaultgadget.png");
+                }
+    
+                return gadgetSpec;
+            }
+            else {
+                m_logService.log(LogService.LOG_WARNING, "Could not retrieve 
gadget spec for url '" + gadgetUrl + "', ignoring gadget");
             }
-
-            return gadgetSpec;
         }
         catch (Exception e) {
             // Catch all exceptions since even an improper URL can cause a 
NullPointerException here
_______________________________________________
Amdatu-commits mailing list
[email protected]
http://lists.amdatu.org/mailman/listinfo/amdatu-commits

Reply via email to