<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="#0563C1" vlink="#954F72" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoNormal">Would you happen to have an example of how I can extract multiple attributes and combine them together in Shibboleth 4.0.1? (it works for me in version 3.3.2)<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">For example if I need to extract “sn” and “givenName” from LDAP and return them as “displayName”, is there a good example you can provide on how to do that?<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">In attribute resolver I used the following sample provided in the docs:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><AttributeDefinition id="template" xsi:type="Template"><o:p></o:p></p>
<p class="MsoNormal">               <InputDataConnector ref="myLdap" attributeNames="givenName" /><o:p></o:p></p>
<p class="MsoNormal">    <InputDataConnector ref="myLdap" attributeNames="sn" /><o:p></o:p></p>
<p class="MsoNormal">    <Template>${givenName}::${sn}</Template><o:p></o:p></p>
<p class="MsoNormal"></AttributeDefinition><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">The logs throw the following error:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Below it states <o:p></o:p></p>
<p class="MsoNormal" style="text-indent:.5in">Plugin 'template' has a dependency on data connector 'myLdap' which doesn't exist<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">This does not seem to be accurate, since “myLdap” connector works just fine if I remove this configuration and I am able to extract single attributes from it.
<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">2020-11-23 20:30:59,538 -  - ERROR [net.shibboleth.utilities.java.support.service.AbstractReloadableService:182] - Service 'shibboleth.AttributeResolverService': Initial load failed<o:p></o:p></p>
<p class="MsoNormal">net.shibboleth.utilities.java.support.service.ServiceException: Failed to load [file [/opt/shibboleth-idp/conf/attribute-resolver.xml]]<o:p></o:p></p>
<p class="MsoNormal">               at net.shibboleth.ext.spring.service.ReloadableSpringService.doReload(ReloadableSpringService.java:387)<o:p></o:p></p>
<p class="MsoNormal">               at net.shibboleth.utilities.java.support.service.AbstractReloadableService.doInitialize(AbstractReloadableService.java:176)<o:p></o:p></p>
<p class="MsoNormal">               at net.shibboleth.ext.spring.service.ReloadableSpringService.doInitialize(ReloadableSpringService.java:473)<o:p></o:p></p>
<p class="MsoNormal">               at net.shibboleth.utilities.java.support.component.AbstractInitializableComponent.initialize(AbstractInitializableComponent.java:61)<o:p></o:p></p>
<p class="MsoNormal">               at jdk.internal.reflect.GeneratedMethodAccessor44.invoke(Unknown Source)<o:p></o:p></p>
<p class="MsoNormal">               at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)<o:p></o:p></p>
<p class="MsoNormal">               at java.base/java.lang.reflect.Method.invoke(Method.java:566)<o:p></o:p></p>
<p class="MsoNormal">               at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1922)<o:p></o:p></p>
<p class="MsoNormal">               at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1864)<o:p></o:p></p>
<p class="MsoNormal">               at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1792)<o:p></o:p></p>
<p class="MsoNormal">               at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:595)<o:p></o:p></p>
<p class="MsoNormal">               at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517)<o:p></o:p></p>
<p class="MsoNormal">               at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323)<o:p></o:p></p>
<p class="MsoNormal">               at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)<o:p></o:p></p>
<p class="MsoNormal">               at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321)<o:p></o:p></p>
<p class="MsoNormal">               at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)<o:p></o:p></p>
<p class="MsoNormal">               at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:879)<o:p></o:p></p>
<p class="MsoNormal">               at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:878)<o:p></o:p></p>
<p class="MsoNormal">               at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550)<o:p></o:p></p>
<p class="MsoNormal">               at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:401)<o:p></o:p></p>
<p class="MsoNormal">               at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:292)<o:p></o:p></p>
<p class="MsoNormal">               at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:103)<o:p></o:p></p>
<p class="MsoNormal">               at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4686)<o:p></o:p></p>
<p class="MsoNormal">               at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5147)<o:p></o:p></p>
<p class="MsoNormal">               at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)<o:p></o:p></p>
<p class="MsoNormal">               at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:717)<o:p></o:p></p>
<p class="MsoNormal">               at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:690)<o:p></o:p></p>
<p class="MsoNormal">               at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:705)<o:p></o:p></p>
<p class="MsoNormal">               at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:631)<o:p></o:p></p>
<p class="MsoNormal">               at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1830)<o:p></o:p></p>
<p class="MsoNormal">               at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)<o:p></o:p></p>
<p class="MsoNormal">               at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)<o:p></o:p></p>
<p class="MsoNormal">               at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)<o:p></o:p></p>
<p class="MsoNormal">               at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:118)<o:p></o:p></p>
<p class="MsoNormal">               at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:526)<o:p></o:p></p>
<p class="MsoNormal">               at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:425)<o:p></o:p></p>
<p class="MsoNormal">               at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1576)<o:p></o:p></p>
<p class="MsoNormal">               at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:309)<o:p></o:p></p>
<p class="MsoNormal">               at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123)<o:p></o:p></p>
<p class="MsoNormal">               at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:423)<o:p></o:p></p>
<p class="MsoNormal">               at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:366)<o:p></o:p></p>
<p class="MsoNormal">               at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:936)<o:p></o:p></p>
<p class="MsoNormal">               at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:841)<o:p></o:p></p>
<p class="MsoNormal">               at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)<o:p></o:p></p>
<p class="MsoNormal">               at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1384)<o:p></o:p></p>
<p class="MsoNormal">               at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1374)<o:p></o:p></p>
<p class="MsoNormal">               at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)<o:p></o:p></p>
<p class="MsoNormal">               at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)<o:p></o:p></p>
<p class="MsoNormal">               at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140)<o:p></o:p></p>
<p class="MsoNormal">               at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:909)<o:p></o:p></p>
<p class="MsoNormal">               at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262)<o:p></o:p></p>
<p class="MsoNormal">               at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)<o:p></o:p></p>
<p class="MsoNormal">               at org.apache.catalina.core.StandardService.startInternal(StandardService.java:421)<o:p></o:p></p>
<p class="MsoNormal">               at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)<o:p></o:p></p>
<p class="MsoNormal">               at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:930)<o:p></o:p></p>
<p class="MsoNormal">               at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)<o:p></o:p></p>
<p class="MsoNormal">               at org.apache.catalina.startup.Catalina.start(Catalina.java:633)<o:p></o:p></p>
<p class="MsoNormal">               at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)<o:p></o:p></p>
<p class="MsoNormal">               at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)<o:p></o:p></p>
<p class="MsoNormal">               at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)<o:p></o:p></p>
<p class="MsoNormal">               at java.base/java.lang.reflect.Method.invoke(Method.java:566)<o:p></o:p></p>
<p class="MsoNormal">               at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:343)<o:p></o:p></p>
<p class="MsoNormal">               at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:474)<o:p></o:p></p>
<p class="MsoNormal">Caused by: net.shibboleth.utilities.java.support.service.ServiceException: Unable to initialize attribute resolver for ApplicationContext:shibboleth.AttributeResolverService<o:p></o:p></p>
<p class="MsoNormal">               at net.shibboleth.idp.attribute.resolver.spring.impl.AttributeResolverServiceStrategy.apply(AttributeResolverServiceStrategy.java:89)<o:p></o:p></p>
<p class="MsoNormal">               at net.shibboleth.idp.attribute.resolver.spring.impl.AttributeResolverServiceStrategy.apply(AttributeResolverServiceStrategy.java:44)<o:p></o:p></p>
<p class="MsoNormal">               at net.shibboleth.ext.spring.service.ReloadableSpringService.doReload(ReloadableSpringService.java:384)<o:p></o:p></p>
<p class="MsoNormal">               ... 62 common frames omitted<o:p></o:p></p>
<p class="MsoNormal">Caused by: net.shibboleth.utilities.java.support.component.ComponentInitializationException: Attribute Resolver 'ShibbolethAttributeResolver': Plugin 'template' has a dependency on data connector 'myLdap' which doesn't exist<o:p></o:p></p>
<p class="MsoNormal">               at net.shibboleth.idp.attribute.resolver.impl.AttributeResolverImpl.checkPlugInDependencies(AttributeResolverImpl.java:705)<o:p></o:p></p>
<p class="MsoNormal">               at net.shibboleth.idp.attribute.resolver.impl.AttributeResolverImpl.doInitialize(AttributeResolverImpl.java:649)<o:p></o:p></p>
<p class="MsoNormal">               at net.shibboleth.utilities.java.support.component.AbstractInitializableComponent.initialize(AbstractInitializableComponent.java:61)<o:p></o:p></p>
<p class="MsoNormal">               at net.shibboleth.idp.attribute.resolver.spring.impl.AttributeResolverServiceStrategy.apply(AttributeResolverServiceStrategy.java:87)<o:p></o:p></p>
<p class="MsoNormal">               ... 64 common frames omitted<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><b><span style="font-size:8.0pt;font-family:Consolas;color:#44546A"><o:p> </o:p></span></b></p>
<p class="MsoNormal"><b><span style="font-size:8.0pt;font-family:Consolas;color:#44546A"><o:p> </o:p></span></b></p>
<p class="MsoNormal"><b><span style="font-size:8.0pt;font-family:Consolas;color:#44546A"><o:p> </o:p></span></b></p>
<p class="MsoNormal"><b><span style="font-size:8.0pt">Moses Feinstein<o:p></o:p></span></b></p>
<p class="MsoNormal"><i><span style="font-size:8.0pt;color:#767171">Sr. Software / IAM Engineer, App Dev Dept<o:p></o:p></span></i></p>
<p class="MsoNormal"><span style="font-size:8.0pt">Touro College and University System<o:p></o:p></span></p>
<p class="MsoNormal"><b><span style="font-size:8.0pt">                    </span>
</b><o:p></o:p></p>
</div>
</body>
</html>