You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@sling.apache.org by "Robert Munteanu (Jira)" <ji...@apache.org> on 2020/08/07 11:24:00 UTC
[jira] [Commented] (SLING-9620) ResourceMapperImpl.getAllMappings
does not respect multi-valued sling:alias
[ https://issues.apache.org/jira/browse/SLING-9620?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17173085#comment-17173085 ]
Robert Munteanu commented on SLING-9620:
----------------------------------------
[~angela] - thank your for the report and for the patch. I am getting close to finalising the bug fix (at least for the optimise alias resolution disabled scenario ).
To make the test advance I needed to make a small change to your patch, see below:
{noformat}
diff --git a/src/test/java/org/apache/sling/resourceresolver/impl/mapping/InMemoryResourceProvider.java b/src/test/java/org/apache/sling/resourceresolver/impl/mapping/InMemoryResourceProvider.java
index bc288e3..28a8c1b 100644
--- a/src/test/java/org/apache/sling/resourceresolver/impl/mapping/InMemoryResourceProvider.java
+++ b/src/test/java/org/apache/sling/resourceresolver/impl/mapping/InMemoryResourceProvider.java
@@ -19,7 +19,6 @@
package org.apache.sling.resourceresolver.impl.mapping;
-import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
@@ -67,7 +66,7 @@ public class InMemoryResourceProvider extends ResourceProvider<Void> {
}
public void putResource(String path, String key, Object... values) {
- putResource(path, Collections.singletonMap(key, Arrays.asList(values)));
+ putResource(path, Collections.singletonMap(key, values));
}
public void putResource(String path, String key, Object value, String key2, Object value2) {
{noformat}
Otherwise the property conversion will not work as expected. Does that look OK to you?
> ResourceMapperImpl.getAllMappings does not respect multi-valued sling:alias
> ---------------------------------------------------------------------------
>
> Key: SLING-9620
> URL: https://issues.apache.org/jira/browse/SLING-9620
> Project: Sling
> Issue Type: Bug
> Components: ResourceResolver
> Affects Versions: Resource Resolver 1.6.16
> Reporter: Angela Schreiber
> Assignee: Robert Munteanu
> Priority: Major
> Fix For: Resource Resolver 1.6.18
>
> Attachments: SLING-9620-test.patch
>
>
> while investigating an issue involving {{sling:alias}}, i ended up manually adding the property using JCR API calls. this involved first adding the {{sling:ResourceAlias}} and i noticed that {{sling:alias}} can be both single or multi-valued according to the node type definition:
> {code}
> / Mixin node type to enable setting an alias on a resource
> [sling:ResourceAlias]
> mixin
>
> // alias name(s) for the node (single or multi-value)
> - sling:alias (string)
> - sling:alias (string) multiple
> {code}
> when setting multiple values for the {{sling:alias}} property, i found that {{ResourceMapper.getAllMappings}} only returns the first alias.
> looking at the implementation in {{ResourceMapperImpl.loadAliasIfApplicable}}, it seems that line 216 ({{String alias = ResourceResolverControl.getProperty(current, ResourceResolverImpl.PROP_ALIAS);}}), is the culprit as call will in any case just return a single string (it calls {{getProperty(res, propName, String.class)}}).
> as a consequence consumers of the {{ResourceMapper.getAllMappings}} method will not get a complete list of all aliases available.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)