On 16 Jun 2010, at 23:09, Randy Watler wrote: > Scott: > > Phew... that was unexpected! I was just trying to save some marshaling > to/from arrays there, (now I feel like an idiot). What configurations have > the parser loaded in a different classloader?
I noticed that, however calls like /wookie/widgets?all=true were throwing errors - it took me a while to track it down to this marshalling problem. It arises as the Parser module is compiled as a separate sub-project and installed via Ivy as a dependency, so it doesn't necessarily have runtime access to the Wookie Server classes. > > Randy > > [email protected] wrote: >> Author: scottbw >> Date: Wed Jun 16 21:45:03 2010 >> New Revision: 955407 >> >> URL: http://svn.apache.org/viewvc?rev=955407&view=rev >> Log: >> [in PP branch] replaced calls for localization using collections with >> arrays; this is because the parser may be loaded with a different >> classloader, and so cannot appropriately cast the return arrays from the >> supplied collection. >> >> Modified: >> >> incubator/wookie/branches/pluggablepersistence/parser/java/src/org/apache/wookie/w3c/util/LocalizationUtils.java >> >> incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/beans/IWidget.java >> >> incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/controller/WidgetInstancesController.java >> >> incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/helpers/WidgetHelper.java >> >> incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/util/opensocial/OpenSocialUtils.java >> >> Modified: >> incubator/wookie/branches/pluggablepersistence/parser/java/src/org/apache/wookie/w3c/util/LocalizationUtils.java >> URL: >> http://svn.apache.org/viewvc/incubator/wookie/branches/pluggablepersistence/parser/java/src/org/apache/wookie/w3c/util/LocalizationUtils.java?rev=955407&r1=955406&r2=955407&view=diff >> ============================================================================== >> --- >> incubator/wookie/branches/pluggablepersistence/parser/java/src/org/apache/wookie/w3c/util/LocalizationUtils.java >> (original) >> +++ >> incubator/wookie/branches/pluggablepersistence/parser/java/src/org/apache/wookie/w3c/util/LocalizationUtils.java >> Wed Jun 16 21:45:03 2010 >> @@ -49,20 +49,6 @@ public class LocalizationUtils { >> } >> >> /** >> - * Returns the first (best) match for an element given the set of >> locales, or null >> - * if there are no suitable elements. >> - * @param elements collection >> - * @param locales >> - * @return an ILocalizedElement, or null if there are no valid entries >> - */ >> - public static ILocalizedElement getLocalizedElement(Collection<? >> extends ILocalizedElement> elements, String[] locales){ >> - if (elements == null) return null; >> - ILocalizedElement[] elementsArray = >> processElementsByLocales(elements,locales); >> - if (elementsArray.length == 0) return null; >> - return elementsArray[0]; >> - } >> - >> - /** >> * Filters and sorts a list of localized elements using the given >> locale list; only localized elements >> * are returned unless no appropriate localized elements are found, in >> which case nonlocalized elements >> * are returned >> @@ -79,23 +65,6 @@ public class LocalizationUtils { >> } >> >> /** >> - * Filters and sorts a list of localized elements using the given >> locale list; only localized elements >> - * are returned unless no appropriate localized elements are found, in >> which case nonlocalized elements >> - * are returned >> - * - * @param elements collection >> - * @param locales >> - * @return the sorted and filtered set of elements >> - */ >> - public static ILocalizedElement[] processElementsByLocales(Collection<? >> extends ILocalizedElement> elements,String[] locales){ >> - if (elements == null) return null; >> - List<ULocale> localesList = getProcessedLocaleList(locales); >> - ILocalizedElement[] elementsArray = elements.toArray(new >> ILocalizedElement[elements.size()]); >> - Arrays.sort(elementsArray, new LocaleComparator(localesList)); >> - return filter(elementsArray,localesList); >> - } >> - >> - /** >> * Sorts an array of localized elements using default locales (*). This >> places >> * any localized elements first, then any unlocalized elements >> * @return >> >> Modified: >> incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/beans/IWidget.java >> URL: >> http://svn.apache.org/viewvc/incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/beans/IWidget.java?rev=955407&r1=955406&r2=955407&view=diff >> ============================================================================== >> --- >> incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/beans/IWidget.java >> (original) >> +++ >> incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/beans/IWidget.java >> Wed Jun 16 21:45:03 2010 >> @@ -332,7 +332,8 @@ public interface IWidget extends IBean >> */ >> public static String getWidgetTitle(IWidget widget, String locale) >> { >> - IName name = >> (IName)LocalizationUtils.getLocalizedElement(widget.getNames(), new >> String[]{locale}); >> + IName[] names = widget.getNames().toArray(new >> IName[widget.getNames().size()]); >> + IName name = >> (IName)LocalizationUtils.getLocalizedElement(names, new String[]{locale}); >> return ((name != null) ? name.getName() : >> IW3CXMLConfiguration.UNKNOWN); >> } >> @@ -345,7 +346,8 @@ public interface IWidget extends IBean >> */ >> public static String getWidgetDescription(IWidget widget, String >> locale) >> { >> - IDescription description = >> (IDescription)LocalizationUtils.getLocalizedElement(widget.getDescriptions(), >> new String[]{locale}); >> + IDescription[] descriptions = >> widget.getDescriptions().toArray(new >> IDescription[widget.getDescriptions().size()]); >> + IDescription description = >> (IDescription)LocalizationUtils.getLocalizedElement(descriptions, new >> String[]{locale}); >> return ((description != null) ? description.getContent() : null); >> } >> @@ -358,7 +360,8 @@ public interface IWidget extends IBean >> */ >> public static String getWidgetShortName(IWidget widget, String >> locale) >> { >> - IName name = >> (IName)LocalizationUtils.getLocalizedElement(widget.getNames(), new >> String[]{locale}); >> + IName[] names = widget.getNames().toArray(new >> IName[widget.getNames().size()]); >> + IName name = >> (IName)LocalizationUtils.getLocalizedElement(names, new String[]{locale}); >> return ((name != null) ? name.getShortName() : >> IW3CXMLConfiguration.UNKNOWN); >> } >> @@ -411,7 +414,8 @@ public interface IWidget extends IBean >> */ >> public static String getUrl(IWidget widget, String locale) >> { >> - IStartFile startFile = >> (IStartFile)LocalizationUtils.getLocalizedElement(widget.getStartFiles(), >> new String[]{locale}); >> + IStartFile[] startFiles = widget.getStartFiles().toArray(new >> IStartFile[widget.getStartFiles().size()]); >> + IStartFile startFile = >> (IStartFile)LocalizationUtils.getLocalizedElement(startFiles, new >> String[]{locale}); >> return ((startFile != null) ? startFile.getUrl() : null); >> } >> @@ -424,7 +428,8 @@ public interface IWidget extends IBean >> */ >> public static String getWidgetIconLocation(IWidget widget, String >> locale) >> { >> - IWidgetIcon icon = >> (IWidgetIcon)LocalizationUtils.getLocalizedElement(widget.getWidgetIcons(), >> new String[]{locale}); >> + IWidgetIcon[] icons = widget.getWidgetIcons().toArray(new >> IWidgetIcon[widget.getWidgetIcons().size()]); >> + IWidgetIcon icon = >> (IWidgetIcon)LocalizationUtils.getLocalizedElement(icons, new >> String[]{locale}); >> return ((icon != null) ? icon.getSrc() : null); >> } >> } >> >> Modified: >> incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/controller/WidgetInstancesController.java >> URL: >> http://svn.apache.org/viewvc/incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/controller/WidgetInstancesController.java?rev=955407&r1=955406&r2=955407&view=diff >> ============================================================================== >> --- >> incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/controller/WidgetInstancesController.java >> (original) >> +++ >> incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/controller/WidgetInstancesController.java >> Wed Jun 16 21:45:03 2010 >> @@ -305,7 +305,7 @@ public class WidgetInstancesController e >> protected static String getUrl(HttpServletRequest request, >> IWidgetInstance instance) throws IOException{ >> String url = ""; >> - Collection<IStartFile> startFiles = >> instance.getWidget().getStartFiles(); >> + IStartFile[] startFiles = >> instance.getWidget().getStartFiles().toArray(new >> IStartFile[instance.getWidget().getStartFiles().size()]); >> IStartFile sf = (IStartFile) >> LocalizationUtils.getLocalizedElement(startFiles, new >> String[]{instance.getLang()}); >> // Try default locale if no appropriate localization found >> if (sf == null) sf = (IStartFile) >> LocalizationUtils.getLocalizedElement(startFiles, null); >> >> Modified: >> incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/helpers/WidgetHelper.java >> URL: >> http://svn.apache.org/viewvc/incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/helpers/WidgetHelper.java?rev=955407&r1=955406&r2=955407&view=diff >> ============================================================================== >> --- >> incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/helpers/WidgetHelper.java >> (original) >> +++ >> incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/helpers/WidgetHelper.java >> Wed Jun 16 21:45:03 2010 >> @@ -115,7 +115,8 @@ public class WidgetHelper { >> >> private static String getLicenses(IWidget widget, String[] locales){ >> String out = ""; >> - ILicense[] licenses = >> (ILicense[])LocalizationUtils.processElementsByLocales(widget.getLicenses(), >> locales); >> + ILicense[] licenses = widget.getLicenses().toArray(new >> ILicense[widget.getLicenses().size()]); >> + licenses = >> (ILicense[])LocalizationUtils.processElementsByLocales(licenses, locales); >> for (ILicense license: licenses){ >> out +="\t\t<license "; >> if (license.getLang()!=null) out+=" >> xml:lang=\""+license.getLang()+"\""; >> @@ -135,7 +136,8 @@ public class WidgetHelper { >> } >> private static String getName(IWidget widget, String[] locales){ >> - IName name = >> (IName)LocalizationUtils.getLocalizedElement(widget.getNames(),locales); >> + IName[] names = widget.getNames().toArray(new >> IName[widget.getNames().size()]); >> + IName name = >> (IName)LocalizationUtils.getLocalizedElement(names,locales); >> String shortName = null; >> String longName = null; >> if (name != null) { >> @@ -152,7 +154,8 @@ public class WidgetHelper { >> } >> private static String getDescription(IWidget widget, String[] locales){ >> - IDescription desc = >> (IDescription)LocalizationUtils.getLocalizedElement(widget.getDescriptions(), >> locales); >> + IDescription[] descriptions = >> widget.getDescriptions().toArray(new >> IDescription[widget.getDescriptions().size()]); >> + IDescription desc = >> (IDescription)LocalizationUtils.getLocalizedElement(descriptions, locales); >> String out = "\t\t<description"; >> if (desc!= null && desc.getDir()!=null) out+=" >> dir=\""+desc.getDir()+"\""; >> out += ">"; >> @@ -174,7 +177,7 @@ public class WidgetHelper { >> String out = ""; >> IWidgetIcon[] icons; >> if (locales != null && locales.length != 0){ >> - icons = >> (IWidgetIcon[])LocalizationUtils.processElementsByLocales(widget.getWidgetIcons(), >> locales); >> + icons = >> (IWidgetIcon[])LocalizationUtils.processElementsByLocales(widget.getWidgetIcons().toArray(new >> IWidgetIcon[widget.getWidgetIcons().size()]), locales); >> } else { >> icons = widget.getWidgetIcons().toArray(new >> IWidgetIcon[widget.getWidgetIcons().size()]); >> } >> >> Modified: >> incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/util/opensocial/OpenSocialUtils.java >> URL: >> http://svn.apache.org/viewvc/incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/util/opensocial/OpenSocialUtils.java?rev=955407&r1=955406&r2=955407&view=diff >> ============================================================================== >> --- >> incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/util/opensocial/OpenSocialUtils.java >> (original) >> +++ >> incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/util/opensocial/OpenSocialUtils.java >> Wed Jun 16 21:45:03 2010 >> @@ -127,8 +127,8 @@ public class OpenSocialUtils { >> } >> >> private static String getUrl(IWidgetInstance instance){ >> - Collection<IStartFile> files = instance.getWidget().getStartFiles(); >> - IStartFile start = (IStartFile) >> LocalizationUtils.getLocalizedElement(files, new String[]{"en"}); >> + IStartFile[] startFiles = >> instance.getWidget().getStartFiles().toArray(new >> IStartFile[instance.getWidget().getStartFiles().size()]); >> + IStartFile start = (IStartFile) >> LocalizationUtils.getLocalizedElement(startFiles, new String[]{"en"}); >> return start.getUrl(); >> } >> >> >> >> >
