Hello,
very nice you resolved your issues.

What you want to do now, with Syncope, is not the correct way to do that.
You can not use mapping for logical things, mapping - more or less - is one
to one from Syncope to the external resource; you can calculate some
expression by using JEXL but that's all.

In your case depends totally from what you need to do, generally you have
to forward logic things in REST scripts, so Syncope will create all
attributes from the mapping and BEFORE the provision you'll adjust all the
attributes for the external resource.

HTH

Best regards,
Lorenzo

Il giorno gio 22 gen 2026 alle ore 12:53 Stéphane Popoff <
[email protected]> ha scritto:

> Hi Lorenzo,
>
> Schema and mapping are corrected now. I can propagate information from
> a group to an account if I use a mapping like:
> "groups[appAdmin].appName".
> My question is what can I do to dynamically change, maybe by program,
> the value "appAdmin" ?
>
> Best regards,
>
> Stéphane POPOFF
>
> {
>     "key": "admin",
>     "connector": "019be54f-fec3-7403-b739-f82d00f6012f",
>     "connectorDisplayName": "RestAdmin",
>     "provisions": [
>         {
>             "anyType": "GROUP",
>             "objectClass": "__GROUP__",
>             "auxClasses": [
>                 "AdminGroup"
>             ],
>             "syncToken": null,
>             "ignoreCaseMatch": false,
>             "uidOnCreate": null,
>             "mapping": {
>                 "items": [
>                     {
>                         "intAttrName": "name",
>                         "extAttrName": "appName",
>                         "connObjectKey": true,
>                         "password": false,
>                         "mandatoryCondition": "true",
>                         "purpose": "BOTH",
>                         "propagationJEXLTransformer": null,
>                         "pullJEXLTransformer": null,
>                         "transformers": []
>                     },
>                     {
>                         "intAttrName": "key",
>                         "extAttrName": "key",
>                         "connObjectKey": false,
>                         "password": false,
>                         "mandatoryCondition": "false",
>                         "purpose": "BOTH",
>                         "propagationJEXLTransformer": null,
>                         "pullJEXLTransformer": null,
>                         "transformers": []
>                     },
>                     {
>                         "intAttrName": "groups[appAdmin].projects",
>                         "extAttrName": "projects",
>                         "connObjectKey": false,
>                         "password": false,
>                         "mandatoryCondition": "false",
>                         "purpose": "PROPAGATION",
>                         "propagationJEXLTransformer": null,
>                         "pullJEXLTransformer": null,
>                         "transformers": []
>                     },
>                     {
>                         "intAttrName": "groups[appAdmin].appName",
>                         "extAttrName": "appName",
>                         "connObjectKey": false,
>                         "password": false,
>                         "mandatoryCondition": "false",
>                         "purpose": "PROPAGATION",
>                         "propagationJEXLTransformer": null,
>                         "pullJEXLTransformer": null,
>                         "transformers": []
>                     }
>                 ],
>                 "connObjectLink": null
>             }
>         },
>         {
>             "anyType": "USER",
>             "objectClass": "__ACCOUNT__",
>             "auxClasses": [
>                 "AdminGroup"
>             ],
>             "syncToken": null,
>             "ignoreCaseMatch": false,
>             "uidOnCreate": null,
>             "mapping": {
>                 "items": [
>                     {
>                         "intAttrName": "username",
>                         "extAttrName": "login",
>                         "connObjectKey": true,
>                         "password": false,
>                         "mandatoryCondition": "true",
>                         "purpose": "BOTH",
>                         "propagationJEXLTransformer": null,
>                         "pullJEXLTransformer": null,
>                         "transformers": []
>                     },
>                     {
>                         "intAttrName": "appName",
>                         "extAttrName": "appName",
>                         "connObjectKey": false,
>                         "password": false,
>                         "mandatoryCondition": "false",
>                         "purpose": "BOTH",
>                         "propagationJEXLTransformer": null,
>                         "pullJEXLTransformer": null,
>                         "transformers": []
>                     },
>                     {
>                         "intAttrName": "key",
>                         "extAttrName": "key",
>                         "connObjectKey": false,
>                         "password": false,
>                         "mandatoryCondition": "false",
>                         "purpose": "BOTH",
>                         "propagationJEXLTransformer": null,
>                         "pullJEXLTransformer": null,
>                         "transformers": []
>                     },
>                     {
>                         "intAttrName": "login",
>                         "extAttrName": "login",
>                         "connObjectKey": false,
>                         "password": false,
>                         "mandatoryCondition": "false",
>                         "purpose": "BOTH",
>                         "propagationJEXLTransformer": null,
>                         "pullJEXLTransformer": null,
>                         "transformers": []
>                     },
>                     {
>                         "intAttrName": "projects",
>                         "extAttrName": "projects",
>                         "connObjectKey": false,
>                         "password": false,
>                         "mandatoryCondition": "false",
>                         "purpose": "BOTH",
>                         "propagationJEXLTransformer": null,
>                         "pullJEXLTransformer": null,
>                         "transformers": []
>                     },
>                     {
>                         "intAttrName": "groups[appAdmin].appName",
>                         "extAttrName": "appName",
>                         "connObjectKey": false,
>                         "password": false,
>                         "mandatoryCondition": "false",
>                         "purpose": "PROPAGATION",
>                         "propagationJEXLTransformer": null,
>                         "pullJEXLTransformer": null,
>                         "transformers": []
>                     },
>                     {
>                         "intAttrName": "groups[appAdmin].projects",
>                         "extAttrName": "projects",
>                         "connObjectKey": false,
>                         "password": false,
>                         "mandatoryCondition": "false",
>                         "purpose": "PROPAGATION",
>                         "propagationJEXLTransformer": null,
>                         "pullJEXLTransformer": null,
>                         "transformers": []
>                     }
>                 ],
>                 "connObjectLink": null
>             }
>         }
>     ],
>     "orgUnit": null,
>     "propagationPriority": 10,
>     "enforceMandatoryCondition": true,
>     "createTraceLevel": "ALL",
>     "updateTraceLevel": "ALL",
>     "deleteTraceLevel": "ALL",
>     "provisioningTraceLevel": "ALL",
>     "passwordPolicy": null,
>     "accountPolicy": null,
>     "propagationPolicy": null,
>     "inboundPolicy": null,
>     "pushPolicy": null,
>     "provisionSorter": null,
>     "authPolicy": null,
>     "accessPolicy": null,
>     "confOverrideFlag": true,
>     "confOverrideValue": [],
>     "capabilitiesOverrideFlag": false,
>     "capabilitiesOverrideValue": null,
>     "propagationActions": []
> }
>
> Le mer. 21 janv. 2026 à 10:14, Lorenzo Di Cola <[email protected]> a
> écrit :
> >
> > Hi Stéphane,
> >
> > nice to hear you're going ahead.
> > Here, what I can see is some problem in the groovy script, probably in
> your SchemaScript.groovy
> > I can suppose in your script you're passing AttributeInfoBuilder instead
> of AttributeInfo, so you're missing the build() method.
> > Please take as a reference the SchemaScript [1].
> >
> > [1]
> https://github.com/apache/syncope/blob/master/fit/core-reference/src/test/resources/rest/SchemaScript.groovy
> >
> > Best regards,
> > Lorenzo
> >
> >
> >
> > Il giorno mar 20 gen 2026 alle ore 23:41 Stéphane Popoff <
> [email protected]> ha scritto:
> >>
> >> Hi Lorenzo,
> >>
> >> Thank's for the reply. I have a better result now [1] but don't
> >> understand why I also have errors when reading schema [2]. ([2] is
> >> before [1] from the same Syncope log)
> >>
> >> Best regards,
> >>
> >> Stéphane POPOFF
> >>
> >> [1] 2026-01-20 15:25:39.218 DEBUG [   Thread-6]
> >> net.tirasa.connid.commons.scripted.AbstractScriptedConnector :
> >> ObjectClass: __ACCOUNT__     Method: executeQuery
> >> 2026-01-20 15:25:39.223  INFO [   Thread-6]
> >> net.tirasa.connid.commons.scripted.AbstractScriptedConnector :
> >> Entering SEARCH Script       Method: invoke
> >> 2026-01-20 15:25:39.302 DEBUG [   Thread-6]
> >> net.tirasa.connid.commons.scripted.AbstractScriptedConnector : Search
> >> ok    Method: executeQuery
> >> 2026-01-20 15:25:39.302 DEBUG [   Thread-6]
> >> g.identityconnectors.framework.common.objects.ResultsHandler :
> >> instance='RestAdmin' Enter: handle({Uid=Attribute: {Name=__UID__,
> >> Value=[appAdmin]}, ObjectClass=ObjectClass: __ACCOUNT__,
> >> Attributes=[Attribute: {Name=projects, Value=[projet1, projet2]},
> >> Attribute: {Name=appName, Value=[appAdmin]}, Attribute:
> >> {Name=__NAME__, Value=[appAdmin]}, Attribute: {Name=__UID__,
> >> Value=[appAdmin]}], Name=Attribute: {Name=__NAME__,
> >> Value=[appAdmin]}})      Method: handle
> >> 2026-01-20 15:25:39.304
> >> [operation.id=019bdc02-ec90-7f4b-a905-d7c8af685ed4] DEBUG
> >> [handler-409]
> g.identityconnectors.framework.common.objects.ResultsHandler
> >> : Enter: handle({Uid=Attribute: {Name=__UID__, Value=[appAdmin]},
> >> ObjectClass=ObjectClass: __ACCOUNT__, Attributes=[Attribute:
> >> {Name=projects, Value=[projet1, projet2]}, Attribute: {Name=appName,
> >> Value=[appAdmin]}, Attribute: {Name=__NAME__, Value=[appAdmin]},
> >> Attribute: {Name=__UID__, Value=[appAdmin]}], Name=Attribute:
> >> {Name=__NAME__, Value=[appAdmin]}})    Method: handle
> >> 2026-01-20 15:25:39.304
> >> [operation.id=019bdc02-ec90-7f4b-a905-d7c8af685ed4] DEBUG
> >> [handler-409]
> g.identityconnectors.framework.common.objects.ResultsHandler
> >> : Return: false Method: handle
> >> 2026-01-20 15:25:39.304 DEBUG [   Thread-6]
> >> g.identityconnectors.framework.common.objects.ResultsHandler :
> >> instance='RestAdmin' Return: false   Method: handle
> >> 2026-01-20 15:25:39.305 DEBUG [   Thread-6]
> >> net.tirasa.connid.commons.scripted.AbstractScriptedConnector :
> >> ConnectorObject is built     Method: processResults
> >> 2026-01-20 15:25:39.305 DEBUG [   Thread-6]
> >> org.identityconnectors.framework.spi.SearchResultsHandler    :
> >> instance='RestAdmin' Enter: handleResult(SearchResult:
> >> {PagedResultsCookie=null, RemainingPagedResults=-1,
> >> AllResultsReturned=true})      Method: handleResult
> >> 2026-01-20 15:25:39.306 DEBUG [   Thread-6]
> >> org.identityconnectors.framework.spi.SearchResultsHandler    :
> >> instance='RestAdmin' Return  Method: handleResult
> >> 2026-01-20 15:25:39.306 DEBUG [   Thread-6]
> >> org.identityconnectors.framework.spi.operations.SearchOp     :
> >> instance='RestAdmin' Return  Method: executeQuery
> >> 2026-01-20 15:25:39.308
> >> [operation.id=019bdc02-ec90-7f4b-a905-d7c8af685ed4] DEBUG
> >> [handler-409]
> org.identityconnectors.framework.api.operations.SearchApiOp
> >>  : Return: SearchResult: {PagedResultsCookie=null,
> >> RemainingPagedResults=-1, AllResultsReturned=true}    Method: search
> >>
> >> [2] Caused by: java.lang.ClassCastException: class
> >> org.identityconnectors.framework.common.objects.AttributeInfoBuilder
> >> cannot be cast to class
> >> org.identityconnectors.framework.common.objects.AttributeInfo
> >> (org.identityconnectors.framework.common.objects.AttributeInfoBuilder
> >> and org.identityconnectors.framework.common.objects.AttributeInfo are
> >> in unnamed module of loader
> >> org.springframework.boot.loader.launch.LaunchedClassLoader @6ce253f1)
> >>         at
> org.identityconnectors.framework.common.objects.ObjectClassInfoBuilder.addAllAttributeInfo(ObjectClassInfoBuilder.java:87)
> >>         at
> org.identityconnectors.framework.common.objects.ObjectClassInfoBuilder$addAllAttributeInfo$0.call(Unknown
> >> Source)
> >>         at
> org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)
> >>         at
> org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125)
> >>         at
> org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:176)
> >>         at
> org.kohsuke.groovy.sandbox.GroovyInterceptor.onMethodCall(GroovyInterceptor.java:24)
> >>         at
> org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:176)
> >>         at
> org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:174)
> >>         at
> org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:178)
> >>         at
> org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:344)
> >>         at Script1.run(Script1.groovy:49)
> >>         at
> org.identityconnectors.common.script.groovy.GroovyScriptExecutorFactory$GroovyScriptExecutor.execute(GroovyScriptExecutorFactory.java:100)
> >>         at
> net.tirasa.connid.commons.scripted.AbstractScriptedConnector.schema(AbstractScriptedConnector.java:573)
> >>         ... 28 more
> >>
> >> 2026-01-20 15:25:37.824
> >> [operation.id=019bdc02-ec90-7f4b-a905-d7c8af685ed4] DEBUG
> >> [handler-409]
> org.identityconnectors.framework.api.operations.SearchApiOp
> >>  : instan
> >>
> >>
> >> Le mar. 20 janv. 2026 à 10:54, Lorenzo Di Cola <[email protected]>
> a écrit :
> >> >
> >> > Hello,
> >> > This error is coming from ConnId Framework, not from Syncope itself,
> and it is raised after your connector has returned an object, when the
> framework tries to apply the search filter.
> >> > The filter is the ConnId search filter that Syncope passes to the
> connector when it performs a search or get operation.
> >> > The filter is not configured statically. It is dynamically built by
> Syncope from:
> >> >
> >> > The operation being executed, for example: read, search, etc.
> >> > The mapping of the external resource
> >> > The attribute used as ConnId Name, for example __NAME__, __UID__
> >> >
> >> > Maybe the main question here is the last one, why the mapping is
> wrong for the filter. Please take care about your Syncope mapping
> configuration and how you're using the Connid __NAME__ and __UID__.
> >> >
> >> > HTH
> >> > Best regards,
> >> > Lorenzo
> >> >
> >> > Il giorno sab 17 gen 2026 alle ore 17:49 Stéphane Popoff <
> [email protected]> ha scritto:
> >> >>
> >> >> Hi,
> >> >>
> >> >> When requesting a record on a Rest connector that respond with data:
> >> >>
> {"appName":"appAdmin","key":null,"login":"appAdmin","status":"ACTIVE","projects":["projet1","projet2"],"uid":"appAdmin"}
> >> >>
> >> >> I found in Syncope log this exception:
> >> >> Caused by: java.lang.IllegalStateException: Object {Uid=Attribute:
> >> >> {Name=__UID__, Value=[appAdmin]}, ObjectClass=ObjectClass:
> >> >> __ACCOUNT__, Attributes=[Attribute: {Name=projects, Value=[projet1,
> >> >> projet2]}, Attribute: {Name=appName, Value=[appAdmin]}, Attribute:
> >> >> {Name=__NAME__, Value=[appAdmin]}, Attribute: {Name=__UID__,
> >> >> Value=[appAdmin]}], Name=Attribute: {Name=__NAME__,
> Value=[appAdmin]}}
> >> >> was returned by the connector but failed to pass the framework
> filter.
> >> >> This seems like wrong implementation of the filter in the connector.
> >> >>         at
> org.identityconnectors.framework.impl.api.local.operations.FilteredResultsHandler.handle(FilteredResultsHandler.java:82)
> >> >>         at
> org.identityconnectors.framework.impl.api.local.operations.SearchImpl$AttributesToGetSearchResultsHandler.handle(SearchImpl.java:275)
> >> >>         at
> org.identityconnectors.framework.impl.api.local.operations.SearchImpl$1.handle(SearchImpl.java:145)
> >> >>         at
> org.identityconnectors.framework.impl.api.SearchResultsHandlerLoggingProxy.handle(SearchResultsHandlerLoggingProxy.java:75)
> >> >>         at
> net.tirasa.connid.commons.scripted.AbstractScriptedConnector.processResults(AbstractScriptedConnector.java:800)
> >> >>         at
> net.tirasa.connid.commons.scripted.AbstractScriptedConnector.executeQuery(AbstractScriptedConnector.java:616)
> >> >>         ... 14 more
> >> >>
> >> >> My questions is about the connector filter:
> >> >> - What is attended by the filter ?
> >> >> - Where to find the configuration of that filter ?
> >> >> - Why is the external attribute appName, mapped on the internal name
> >> >> attribute is wrong for the filter ?
> >> >>
> >> >> Best regards,
> >> >>
> >> >> Stéphane POPOFF
> >> >
> >> >
> >> >
> >> > --
> >> >
> >> > --
> >> > Lorenzo Di Cola
> >> >
> >> > Software Engineer @ Tirasa S.r.l.
> >> > Viale Vittoria Colonna, 97 - 65127 Pescara
> >> > Tel +39 0859116307 / FAX +39 0859111173
> >> > http://www.tirasa.net
> >> >
> >> > Apache Syncope Committer
> >> >
> >> > Syncope PMC Member at The Apache Software Foundation
> >> >
> >> > http://people.apache.org/phonebook.html?uid=loredicola
> >
> >
> >
> > --
> >
> > --
> > Lorenzo Di Cola
> >
> > Software Engineer @ Tirasa S.r.l.
> > Viale Vittoria Colonna, 97 - 65127 Pescara
> > Tel +39 0859116307 / FAX +39 0859111173
> > http://www.tirasa.net
> >
> > Apache Syncope Committer
> >
> > Syncope PMC Member at The Apache Software Foundation
> >
> > http://people.apache.org/phonebook.html?uid=loredicola
>


-- 

-- 
Lorenzo Di Cola

Software Engineer @ Tirasa S.r.l.
Viale Vittoria Colonna, 97 - 65127 Pescara
Tel +39 0859116307 / FAX +39 0859111173http://www.tirasa.net

Apache Syncope Committer

Syncope PMC Member at The Apache Software Foundation

http://people.apache.org/phonebook.html?uid=loredicola

Reply via email to