<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <title>resourceLocalService.addResources throws PortalException</title>
  <link rel="self" href="https://liferay.dev/c/message_boards/find_thread?p_l_id=119785294&amp;threadId=110943185" />
  <subtitle>resourceLocalService.addResources throws PortalException</subtitle>
  <id>https://liferay.dev/c/message_boards/find_thread?p_l_id=119785294&amp;threadId=110943185</id>
  <updated>2026-04-03T21:07:24Z</updated>
  <dc:date>2026-04-03T21:07:24Z</dc:date>
  <entry>
    <title>RE: resourceLocalService.addResources throws PortalException</title>
    <link rel="alternate" href="https://liferay.dev/c/message_boards/find_message?p_l_id=119785294&amp;messageId=110962301" />
    <author>
      <name>Mirto Silvio Busico</name>
    </author>
    <id>https://liferay.dev/c/message_boards/find_message?p_l_id=119785294&amp;messageId=110962301</id>
    <updated>2018-09-17T08:14:46Z</updated>
    <published>2018-09-17T08:14:46Z</published>
    <summary type="html">&lt;p&gt;Hi all,&lt;/p&gt;
&lt;p&gt;after some tries I've found that this code seems to work:&lt;/p&gt;
&lt;pre&gt;
    @Indexable(type = IndexableType.REINDEX)
    @Override
    public Foo addFooWithoutId(Foo foo, ServiceContext serviceContext) {

        long resourcePrimKey = counterLocalService.increment();
        foo.setFooId(resourcePrimKey);

        long userId = serviceContext.getUserId();
        long groupId = serviceContext.getScopeGroupId();
        long companyId = serviceContext.getCompanyId();
        long fooId = foo.getFooId();

        User user = null;
        try {
            user = userLocalService.getUser(userId);
        } catch (PortalException pe) {
            System.out.println(pe.getLocalizedMessage());
        }

        foo.setGroupId(groupId);
        foo.setUserId(userId);
        foo.setUserName(user.getFullName());

        foo.setNew(true);
        Foo myFoo = fooPersistence.update(foo);

        &lt;strong&gt;try {
            resourceLocalService.addResources(companyId, groupId, userId, Foo.class.getName(), fooId, false, true,
                    true);
        } catch (PortalException pe) {
            System.out.println(pe.getLocalizedMessage());
        }

        try {
            AssetEntry assetEntry = assetEntryLocalService.updateEntry(userId, groupId, myFoo.getCreateDate(),
                    myFoo.getModifiedDate(), Foo.class.getName(), fooId, myFoo.getUuid(), 0,
                    serviceContext.getAssetCategoryIds(), serviceContext.getAssetTagNames(), true, true, null, null,
                    null, null, ContentTypes.TEXT_HTML, myFoo.getField1(), null, null, null, null, 0, 0, null);
            
            Indexer&amp;lt;Foo&amp;gt; indexer = IndexerRegistryUtil.nullSafeGetIndexer(
                    Foo.class);

            indexer.reindex(foo);

            assetLinkLocalService.updateLinks(userId, assetEntry.getEntryId(), serviceContext.getAssetLinkEntryIds(),
                    AssetLinkConstants.TYPE_RELATED);

        } catch (PortalException pe) {
            System.out.println(pe.getLocalizedMessage());
        }
&lt;/strong&gt;
        return myFoo;
    }
&lt;/pre&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;But I don't know how to verify that this works as expected.&lt;/p&gt;
&lt;p&gt;Anyone knows how to verify if this code is correct?&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;</summary>
    <dc:creator>Mirto Silvio Busico</dc:creator>
    <dc:date>2018-09-17T08:14:46Z</dc:date>
  </entry>
  <entry>
    <title>resourceLocalService.addResources throws PortalException</title>
    <link rel="alternate" href="https://liferay.dev/c/message_boards/find_message?p_l_id=119785294&amp;messageId=110943184" />
    <author>
      <name>Mirto Silvio Busico</name>
    </author>
    <id>https://liferay.dev/c/message_boards/find_message?p_l_id=119785294&amp;messageId=110943184</id>
    <updated>2018-09-13T09:52:46Z</updated>
    <published>2018-09-13T09:52:46Z</published>
    <summary type="html">&lt;html&gt;&lt;head&gt;&lt;/head&gt;&lt;body&gt;&lt;div class="portlet-msg-info"&gt;UPDATE: changed the code but the result is
  the same&lt;/div&gt;
&lt;p&gt;Hi all,&lt;/p&gt;
&lt;p&gt;I'm trying to manage categories and tags in an MVC portlet in Liferay 7.1&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;In the interface aui is able to select categories and tags in the add
  form for a "foo" entity&lt;/p&gt;
&lt;p&gt;In FooLocalServiceImpl.java (line 47) I have:&lt;br&gt; &amp;nbsp;&lt;/p&gt;
&lt;pre&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;public Foo addFooWithoutId(Foo foo, ServiceContext serviceContext) {
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;long resourcePrimKey = counterLocalService.increment();
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;foo.setFooId(resourcePrimKey);&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;long userId = serviceContext.getUserId();
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;long groupId = serviceContext.getScopeGroupId();
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;long companyId = serviceContext.getCompanyId();
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;long fooId = foo.getFooId();
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;User user = null;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;try {
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;user = userLocalService.getUser(userId);
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;} catch (PortalException pe) {
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;System.out.println(pe.getLocalizedMessage());
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;foo.setGroupId(groupId);
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;foo.setUserId(userId);
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;foo.setUserName(user.getFullName());
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Foo myFoo = addFoo(foo);
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;try {
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;resourceLocalService.addResources(companyId, groupId, userId, Foo.class.getName(), fooId, false, true, true);
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;} catch (PortalException pe) {
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;System.out.println(pe.getLocalizedMessage());
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} catch (SystemException se) {
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;System.out.println(se.getLocalizedMessage());
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;try {
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;AssetEntry assetEntry = assetEntryLocalService.updateEntry(
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;userId, groupId, myFoo.getCreateDate(),
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;myFoo.getModifiedDate(), Foo.class.getName(), fooId,
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;myFoo.getUuid(), 0, serviceContext.getAssetCategoryIds(),
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;serviceContext.getAssetTagNames(), true, true, null, null, null,
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;null, ContentTypes.TEXT_HTML, myFoo.getField1(), null, null, null,
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;null, 0, 0, null);
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;assetLinkLocalService.updateLinks(
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;userId, assetEntry.getEntryId(),
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;serviceContext.getAssetLinkEntryIds(),
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;AssetLinkConstants.TYPE_RELATED);
&amp;nbsp;&amp;nbsp; &amp;nbsp;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;} catch (PortalException pe) {
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;System.out.println(pe.getLocalizedMessage());
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} catch (SystemException se) {
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;System.out.println(se.getLocalizedMessage());
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;return myFoo;
&amp;nbsp;&amp;nbsp; &amp;nbsp;}
&lt;/pre&gt;
&lt;p&gt;The&amp;nbsp;&lt;code&gt;resourceLocalService.addResources&lt;/code&gt; throws a
  PortalException error&lt;/p&gt;
&lt;p&gt;Debugging the code I see in the java.lang.Class (line 2124) this code&lt;/p&gt;
&lt;pre&gt;
    @CallerSensitive
    public Method getDeclaredMethod(String name, Class&amp;lt;?&amp;gt;... parameterTypes)
        throws NoSuchMethodException, SecurityException {
        checkMemberAccess(Member.DECLARED, Reflection.getCallerClass(), true);
        Method method = searchMethods(privateGetDeclaredMethods(false), name, parameterTypes);
        if (method == null) {
            throw new NoSuchMethodException(getName() + "." + name + argumentTypesToString(parameterTypes));
        }
        return method;
    }
&lt;/pre&gt;
&lt;p&gt;throws a&amp;nbsp;&lt;code&gt;NoSuchMethodException&lt;/code&gt;&amp;nbsp; and says:&lt;/p&gt;
&lt;p&gt;
  &lt;code&gt;There are no actions associated with the resource msb.db.model.Foo&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;What have I to do to write/read categories and tags for an entity
  generated by service builder?&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</summary>
    <dc:creator>Mirto Silvio Busico</dc:creator>
    <dc:date>2018-09-13T09:52:46Z</dc:date>
  </entry>
</feed>
