diff --git a/source/java/org/alfresco/repo/web/scripts/solr/NodesMetaDataGet.java b/source/java/org/alfresco/repo/web/scripts/solr/NodesMetaDataGet.java index bf65b846c1..fd35e4d3d1 100644 --- a/source/java/org/alfresco/repo/web/scripts/solr/NodesMetaDataGet.java +++ b/source/java/org/alfresco/repo/web/scripts/solr/NodesMetaDataGet.java @@ -35,6 +35,8 @@ import org.alfresco.repo.solr.NodeMetaData; import org.alfresco.repo.solr.NodeMetaDataParameters; import org.alfresco.repo.solr.SOLRTrackingComponent; import org.alfresco.repo.solr.SOLRTrackingComponent.NodeMetaDataQueryCallback; +import org.alfresco.repo.tenant.TenantUtil; +import org.alfresco.repo.tenant.TenantUtil.TenantRunAsWork; import org.alfresco.service.cmr.repository.ChildAssociationRef; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.Path; @@ -252,7 +254,8 @@ public class NodesMetaDataGet extends DeclarativeWebScript private Set ancestors; private String tenantDomain; - public FreemarkerNodeMetaData(SOLRSerializer solrSerializer, NodeMetaData nodeMetaData) throws IOException, JSONException + public FreemarkerNodeMetaData(final SOLRSerializer solrSerializer, final NodeMetaData nodeMetaData) + throws IOException, JSONException { setNodeId(nodeMetaData.getNodeId()); setTenantDomain(nodeMetaData.getTenantDomain()); @@ -287,15 +290,25 @@ public class NodesMetaDataGet extends DeclarativeWebScript setParentAssocs(nodeMetaData.getParentAssocs()); setParentAssocsCrc(nodeMetaData.getParentAssocsCrc()); setAspects(nodeMetaData.getAspects()); - Map props = nodeMetaData.getProperties(); + final Map props = nodeMetaData.getProperties(); if(props != null) { - Map properties = (props != null ? new HashMap(props.size()) : null); - for(QName propName : props.keySet()) + final Map properties = (props != null ? new HashMap(props.size()) : null); + for(final QName propName : props.keySet()) { - Serializable value = props.get(propName); - properties.put(solrSerializer.serializeValue(String.class, propName), - solrSerializer.serialize(propName, value)); + // need to run this in tenant context because types may be in a tenant-specific + // dictionary registry + TenantUtil.runAsTenant(new TenantRunAsWork() + { + @Override + public Void doWork() throws Exception + { + Serializable value = props.get(propName); + properties.put(solrSerializer.serializeValue(String.class, propName), + solrSerializer.serialize(propName, value)); + return null; + } + }, tenantDomain); } setProperties(properties); }