[midPoint] DeltaBuilder for ShadowType - add an attribute value to the resource - Undefined or dynamic path error
Frédéric Lohier
frederic at lohier.org
Wed Apr 7 17:27:52 CEST 2021
Hello,
Following up my last email « Set resource attribute pwdReset when password
changed by Midpoint GUI by IDM admin », I think the password mapping using
channels is the way to go.
What I want to do now is to set this attribute in the password mapping
context using groovy. This attribute exists in the resource schema as an
operational attribute and I can manualy set this attribute for a user
through midpoint GUI (edit projection tab).
My guess is that I have to « build a delta » for the correspondant shadow
object. Am I right?
I know the shadow OID thanks to the projection variable
(projection.getOid()), I tried to build the delta using some examples
around, but I get the error « Undefined or dynamic path: pwdReset in: CTD
({.../common/common-3}ShadowType) ». Any idea of what I am doing wrong?
The full password mapping :
<credentials>
<password>
<outbound>
<name>Password and pwdReset (to force the password reset by
user)</name>
<strength>strong</strength>
<channel>
http://midpoint.evolveum.com/xml/ns/public/gui/channels-3#user</channel>
<expression>
<script>
<code>
// If password modification comes from an Midpoint
admin (channel #user), then we set the Open LDAP pwdReset attribute to TRUE
(this will force the user to reset his password)
import com.evolveum.midpoint.prism.impl.delta.builder.*
import com.evolveum.midpoint.xml.ns._public.common.common_3.*
import com.evolveum.prism.xml.ns._public.types_3.*
def prismContext = midpoint.getPrismContext()
def shadowOid = projection.getOid()
def delta = DeltaBuilder.deltaFor(ShadowType.class, prismContext)
.item(ShadowType.F_ATTRIBUTES, "pwdReset")
.add("TRUE")
.asObjectDelta(shadowOid)
midpoint.modifyObject(delta, null)
// Then we return the password value anyway
return input
</code>
</script>
</expression>
</outbound>
<outbound>
<name> Simple password mapping</name>
<description>We apply this mapping every time, except if the
modification is done on the Midpoint GUI (by an IDM admin)</description>
<strength>strong</strength>
<exceptChannel>
http://midpoint.evolveum.com/xml/ns/public/gui/channels-3#user</
exceptChannel>
</outbound>
<inbound/>
</password>
</credentials>
Error :
java.lang.IllegalArgumentException: Undefined or dynamic path: pwdReset in:
CTD ({.../common/common-3}ShadowType)
at
com.evolveum.midpoint.prism.impl.delta.builder.DeltaBuilder.item(DeltaBuilder.java:92)
at
com.evolveum.midpoint.prism.impl.delta.builder.DeltaBuilder.item(DeltaBuilder.java:85)
at
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)
at
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at
org.codehaus.groovy.runtime.callsite.PlainObjectMetaMethodSite.doInvoke(PlainObjectMetaMethodSite.java:43)
at
org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite$PojoCachedMethodSite.invoke(PojoMetaMethodSite.java:188)
at
org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.call(PojoMetaMethodSite.java:53)
at
org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
at
org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:115)
at
org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:127)
at
expression_in_mapping_'Password_and_pwdReset_(to_force_the_password_reset_by_user)'_in_password_mapping_in_projection_(account_(default)_on_resource_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx(LDAP)).run(expression
in mapping 'Password_and_pwdReset_(to_force_the_password_reset_by_user)' in
password mapping in projection (account (default) on resource:
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (LDAP)):13)
at
com.evolveum.midpoint.model.common.expression.script.groovy.GroovyScriptEvaluator.evaluateScript(GroovyScriptEvaluator.java:203)
at
com.evolveum.midpoint.model.common.expression.script.groovy.GroovyScriptEvaluator.evaluateScript(GroovyScriptEvaluator.java:50)
at
com.evolveum.midpoint.model.common.expression.script.AbstractCachingScriptEvaluator.evaluate(AbstractCachingScriptEvaluator.java:76)
... 36 common frames omitted
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.evolveum.com/pipermail/midpoint/attachments/20210407/11a87b8a/attachment-0001.htm>
More information about the midPoint
mailing list