在Liferay预定工作中创建资产类别

时间:2013-12-08 14:11:03

标签: java liferay scheduled-tasks

我有一个Liferay预定作业,应根据某些规则创建新AssetCategories。但我总是得到AssetCategoryNameException。我的新类别的名称/标题中只有字母,空格和括号,我在现有的类别名称中使用了所有这些。我也尝试用英文字母的常量字符串,结果相同。这个例外可能是什么原因?

我的代码如下所示:

AssetCategoryLocalServiceUtil.addCategory(userId, 0, titleMap, null,
     myVocabulary.getVocabularyId(), null, serviceContext);
  • userId是随机管理员用户的ID,因为它是预定作业,并且没有“登录”用户。
  • titleMap使用以下代码创建:HashMap<Locale, String> titleMap = new HashMap<Locale, String>(); titleMap.put(myLocale, name);
  • serviceContext是一个新的ServiceContext对象

还有一件事,我如何使用此方法的categoryProperties属性(问题解决后)?它是String[],但属性是键值对。

2 个答案:

答案 0 :(得分:0)

以下是AssetCategoryName的无效字符

public static char[] INVALID_CHARACTERS = new char[] {
        CharPool.AMPERSAND, CharPool.APOSTROPHE, CharPool.AT,
        CharPool.BACK_SLASH, CharPool.CLOSE_BRACKET, CharPool.CLOSE_CURLY_BRACE,
        CharPool.COLON, CharPool.COMMA, CharPool.EQUAL, CharPool.GREATER_THAN,
        CharPool.FORWARD_SLASH, CharPool.LESS_THAN, CharPool.NEW_LINE,
        CharPool.OPEN_BRACKET, CharPool.OPEN_CURLY_BRACE, CharPool.PERCENT,
        CharPool.PIPE, CharPool.PLUS, CharPool.POUND, CharPool.QUESTION,
        CharPool.QUOTE, CharPool.RETURN, CharPool.SEMICOLON, CharPool.SLASH,
        CharPool.STAR, CharPool.TILDE
    };

确保您的类别名称不具有任何这些字符。

答案 1 :(得分:0)

好的,我找到了解决方案。问题是由区域设置引起的。 AssetCategory具有名称和本地化标题,addAssetCategory方法使用默认语言环境中的标题作为名称。但在我的情况下,默认语言环境为en_US,而我只在hu_HU中添加titleMap标题。因此,默认语言环境的标题为null,这导致了异常(注意:a NullPointerException会提供更多信息......)。所以我将默认语言环境更改为我的语言环境,代码可以运行。