Я хочу обновить веб-контент Liferay, создав новую версию, поэтому я написал этот сценарий Groovy:
import com.liferay.portal.service.ServiceContext
import com.liferay.portlet.journal.service.JournalArticleLocalServiceUtil
long companyId=10154
long userId=12328
long groupId=17074933
long folderId = 0
String articleId = "17075078"
double version=1
String content='<?xml version = "1.0"?><root available-locales = "en_US" default-locale = "en_US"><static-content language-id = "en_US"><![CDATA[Bonjour]]></static-content></root>'
ServiceContext serviceContext = new com.liferay.portal.service.ServiceContext()
serviceContext.setAddCommunityPermissions(true)
serviceContext.setAddGuestPermissions(true)
serviceContext.setScopeGroupId(groupId)
serviceContext.setCompanyId(companyId)
serviceContext.setUserId(userId)
JournalArticleLocalServiceUtil.updateArticle(
userId, groupId, folderId, articleId, version, content, serviceContext)
К сожалению, консоль сценария Groovy дает сбой, и catalina.out содержит только эту минималистическую отладочную информацию:
null
Идентификаторы я нашел в веб-интерфейсе Liferay. Просто для проверки я проверил содержимое MySQL, значения верны:
mysql> select companyId, userId, groupId, folderId, articleId, version from JournalArticle order by createDate desc limit 1;
+-----------+--------+----------+----------+-----------+---------+
| companyId | userId | groupId | folderId | articleId | version |
+-----------+--------+----------+----------+-----------+---------+
| 10154 | 12328 | 17074933 | 0 | 17075078 | 1 |
+-----------+--------+----------+----------+-----------+---------+
Что я делаю неправильно?
Я использую Liferay Portal Enterprise Edition 6.2.10 EE GA1. Тот же код хорошо работает в Liferay Portal Community Edition 6.2 CE GA6, поэтому мне может понадобиться обходной путь для достижения того, что я хочу.
Когда я использую JournalArticleLocalServiceUtil.updateContent вместо этого, он работает, но я не могу его использовать, так как он не создает новую версию веб-контента (он просто заменяет версию).





Самостоятельное создание экземпляра ServiceContext может быть подвержено ошибкам, поскольку вы не знаете, какие поля требуются для реализации службы. Я предполагаю, что для вашего ServiceContext отсутствует установщик, поэтому updateArticle (или где-то ниже, например: validate , updateAsset...) выдает исключение Nullpointer. Скорее используйте:
ServiceContext serviceContext = ServiceContextFactory.getInstance(JournalArticle.class.getName(), actionRequest);
В противном случае вам может потребоваться отладка (если возможно) реализации службы во время выполнения вашего скрипта.