2013-12-08 41 views
1

我有一個Liferay計劃作業,它應根據一些規則創建新的AssetCategories。但我總是得到一個AssetCategoryNameException。在我的新類別的名稱/標題中只有字母,空格和括號,我在現有類別名稱中使用了所有這些字母,空格和括號。我也嘗試用英文字母不變的字符串,結果相同。這種例外的原因是什麼?在生命週期計劃作業中創建AssetCategory

我的代碼如下所示:

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[],但屬性是鍵值對。

回答

0

好的,我找到了解決方案。問題是由語言環境設置引起的。 AssetCategory具有名稱和本地化標題,addAssetCategory方法使用默認語言環境中的標題作爲名稱。但在我的情況下,默認區域設置爲en_US,而我只在titleMap中放入hu_HU標題。因此,默認語言環境的標題爲空,並導致異常(注意:a NullPointerException會更具信息性......)。所以我將默認語言環境更改爲我的語言環境,並且代碼正常工作。

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 
    }; 

確保您的類別名稱不會有任何字符。

+0

即使只使用字母,我也有同樣的錯誤。當我打印我的'titleMap' var時,我在最後一次測試中得到了以下結果:'{hu_HU = TO}'。這很簡單,但即使這樣也行不通。 – ttamas

+0

您可以在AssetUtil.java的isValidWord上設置調試點,並檢查您獲得的字符是什麼。 –

+0

恐怕現在不是一種選擇。但我試圖將我的字符串轉換爲字節[]並打印字節。我得到了84 79這是所需的十進制代碼。我可以用這個方法設置_titles_,但是例外是關於_name_。是否有可能名稱不是自動設置的,並且爲空?有沒有明確設置類別名稱的方法? – ttamas