Hi Sebastien,
I found a solution for group member ship. As i'm not a java/javascript
developer i didn't succeed to all rewrite javascript code with javascript array
to java constructor. Especially because javascript array do not need a size
definition while Java array need one.
So i just convert my javascript array at the end of the script when i have to
return the "uniquemember" array. Here is the code, where for me it works on
membership changes, on empty groups. Now is possible to have an explanation on
this modification of behavior inside javascript utilization ?
<dataset>
<name>uniqueMember</name>
<policy>FORCE</policy>
<forceValues>
<string>
<![CDATA[js:
var dnRoot = "dc=example,dc=com";
var srcMembersNotFoundInDst = new Array();
var dstMembers = new Array();
var dnNoMembers = "uid=no_members,ou=Private," + dnRoot;
var srcMembers = new Array();
if ( srcBean.getDatasetById("member"))
{
srcMembers = srcBean.getDatasetById("member").toArray() ;
for (var i=0; i < srcMembers.length; i++ ) {
try {
var sam = srcLdap.attribute(srcMembers[i],
'sAMAccountName').get(0);
dstMembers.push(ldap.search("ou=People","(uid="+sam+")").get(0) + "," + dnRoot)
}
catch (e) {
srcMembersNotFoundInDst.push( srcMembers[i]);
}
}
if ( srcMembersNotFoundInDst.length > 0 ) srcMembers =
srcMembersNotFoundInDst.slice(0);
srcMembersNotFoundInDst = [];
for (var i=0; i < srcMembers.length; i++ ) {
try {
var cn = srcLdap.attribute(srcMembers[i],
'cn').get(0);
dstMembers.push(ldap.search("ou=Groups","(cn="
+ cn + ")").get(0) + "," + dnRoot)
}
catch (e) {
srcMembersNotFoundInDst[i]=srcMembers[i];
}
}
if ( dstMembers.length == 0) dstMembers.push( dnNoMembers);
var jArr =
java.lang.reflect.Array.newInstance(java.lang.String, dstMembers.length);
for (var i = 0; i < dstMembers.length; i++) { jArr[i] =
dstMembers[i]; }
jArr
}
else
{
dnNoMembers
}
]]>
</string>
</forceValues>
</dataset>
Regards,
Le 03/05/12, Sébastien Bahloul <[email protected]> a écrit :
> Hi Frédéric,
>
> As mentionned in the link sent before, try to initialize your destination
> array through a Java constructor :
>
>
>
>
> var dstMembers =
> java.lang.reflect.Array.newInstance(java.lang.String, srcBean.getDatasetById("member").size());
>
>
>
> Regards,
>
>
> --
> Sebastien BAHLOUL
> IAM / Security specialist
> Ldap Synchronization Connector : http://lsc-project.org
> Blog : http://sbahloul.wordpress.com/
>
>
>
>
>
>
> 2012/5/2 "POISSON Frédéric" <[email protected]>
>
> >
> >
> > Hi Sébastien,
> >
> > Here is the java version used :
> >
> > # /usr/java/jdk1.6.0_23/bin/java -version
> > java version "1.6.0_23"
> > Java(TM) SE Runtime Environment (build 1.6.0_23-b05)
> > Java HotSpot(TM) Client VM (build 19.0-b09, mixed mode, sharing)
> >
> >
> > # rpm -qf /usr/java/jdk1.6.0_23/bin/java
> > jdk-1.6.0_23-fcs.i586
> > # rpm -qi jdk-1.6.0_23-fcs.i586
> > Name : jdk Relocations: /usr/java
> > Version : 1.6.0_23 Vendor: Oracle and/or its
> > affiliates.
> >
> >
> > Release : fcs Build Date: Sat 13 Nov 2010
> > 01:54:11 AM CET
> > Install Date: Tue 05 Jul 2011 11:39:53 AM CEST Build Host: jdk-lin-1586
> > Group : Development/Tools Source RPM:
> > jdk-1.6.0_23-fcs.src.rpm
> >
> >
> > Size : 148955915 License: Copyright (c) 2010,
> > Oracle and/or its affiliates. All rights reserved. Also under other
> > license(s) as shown at the Description field.
> > Signature : (none)
> > Packager : Java Software <[email protected]>
> >
> >
> > URL : http://java.sun.com/
> > Summary : Java(TM) Platform Standard Edition Development Kit
> > Description :
> > The Java Platform Standard Edition Development Kit (JDK) includes both
> >
> >
> > the runtime environment (Java virtual machine, the Java platform classes
> > and supporting files) and development tools (compilers, debuggers,
> > tool libraries and other tools).
> >
> > The JDK is a development environment for building applications, applets
> >
> >
> > and components that can be deployed with the Java Platform Standard
> > Edition Runtime Environment.
> >
> > This is not the latest one but this is a Sun/Oracle JDK.
> >
> > Do you have some sample code which are using a Java array ?
> >
> >
> >
> > And just for your information i have another dataset for mailLocalAddress
> > using array which correctly work :
> >
> > <dataset>
> > <name>mailLocalAddress</name>
> >
> >
> > <policy>FORCE</policy>
> > <forceValues>
> > <string>
> > <![CDATA[js:
> >
> >
> >
> > var mails ;
> > if (srcBean.getDatasetById("proxyAddresses") )
> > {
> > mails = srcBean.getDatasetById("proxyAddresses").toArray();
> > for (var i=0; i<mails.length; i++ )
> >
> >
> > {
> > mails[i] = mails[i].replace("smtp:","");
> > }
> > }
> > mails
> > ]]>
> > </string>
> >
> >
> > </forceValues>
> > </dataset>
> >
> > Regards,
> >
> > Le 02/05/12, Sébastien Bahloul <[email protected]> a écrit :
> > >
> > >
> > > Hi Frédéric,
> > >
> > > First can you check that you are using a Sun/Oracle Java Runtime
> > > Environment 6/7 (and not an OpenJDK) ?
> > >
> > >
> > >
> > > And try to use a Java array instead of a Native java_script array as
> > > explained there :
> > >
> > >
> > >
> > >
> > >
> > >
> > > http://www.mozilla.org/rhino/ScriptingJava.html#creatingarrays
> > >
> > >
> > >
> > > java_script arrays should work, I will open an bug if you confirmed that
> > > using Java arrays fixed your issue !
> > >
> > >
> > > Regards,
> > > --
> > > Sebastien BAHLOUL
> > >
> > >
> > > IAM / Security specialist
> > >
> > >
> > > Ldap Synchronization Connector : http://lsc-project.org
> > > Blog : http://sbahloul.wordpress.com/
> > >
> > >
> > >
> > >
> > >
> > > 2012/5/2 "POISSON Frédéric" <[email protected]>
> > >
> > >
> > >
> > > >
> > > >
> > > > Hello,
> > > >
> > > > I'm testing LSC 2.0rc2 with a group membership synchronization
> > > > configuration between an Active Directory source to a OpenLDAP
> > > > destination. This configuration runs correctly with release 1.2, but
> > > > when i import inside lsc.xml configuration it failed on an java_script
> > > > error java.lang.ClassNotFoundException:
> > > > sun.org.mozilla.rhino.ScriptableObject.
> > > >
> > > >
> > > >
> > > >
> > > >
> > > > See attachment for output error and here is the configuration of
> > > > uniqueMember attribute :
> > > >
> > > > Could you tell me if i made a mistake inside my lsc.xml ?
> > > >
> > > > <dataset>
> > > > <name>uniqueMember</name>
> > > >
> > > >
> > > >
> > > >
> > > > <policy>FORCE</policy>
> > > > <forceValues>
> > > > <string>
> > > > <![CDATA[js:
> > > >
> > > >
> > > >
> > > >
> > > > var dnRoot = "dc=example,dc=com";
> > > > var srcMembersNotFoundInDst = new Array();
> > > > var dstMembers = new Array();
> > > > var dnNoMembers = "uid=no_members,ou=Private," + dnRoot;
> > > >
> > > >
> > > >
> > > >
> > > > var srcMembers = new Array();
> > > > if ( srcBean.getDatasetById("member"))
> > > > {
> > > > srcMembers = srcBean.getDatasetById("member").toArray()
> > > > ;
> > > > for (var i=0; i < srcMembers.length; i++ ) {
> > > >
> > > >
> > > >
> > > >
> > > > try {
> > > > var sam =
> > > > srcLdap.attribute(srcMembers[i], 'sAMAccountName').get(0);
> > > >
> > > > dstMembers.push(ldap.search("ou=People","(uid="+sam+")").get(0) + "," +
> > > > dnRoot)
> > > >
> > > >
> > > >
> > > >
> > > > }
> > > > catch (e) {
> > > > srcMembersNotFoundInDst.push(
> > > > srcMembers[i]);
> > > > }
> > > > }
> > > > if ( srcMembersNotFoundInDst.length > 0 ) srcMembers =
> > > > srcMembersNotFoundInDst.slice(0);
> > > >
> > > >
> > > >
> > > >
> > > > srcMembersNotFoundInDst = [];
> > > > for (var i=0; i < srcMembers.length; i++ ) {
> > > > try {
> > > > var cn =
> > > > srcLdap.attribute(srcMembers[i], 'cn').get(0);
> > > >
> > > >
> > > >
> > > >
> > > >
> > > > dstMembers.push(ldap.search("ou=Groups","(cn=" + cn + ")").get(0) +
> > > > "," + dnRoot)
> > > > }
> > > > catch (e) {
> > > >
> > > >
> > > >
> > > >
> > > >
> > > > srcMembersNotFoundInDst[i]=srcMembers[i];
> > > > }
> > > > }
> > > > if ( dstMembers.length == 0) dstMembers.push(
> > > > dnNoMembers);
> > > > dstMembers
> > > >
> > > >
> > > >
> > > >
> > > > }
> > > > else
> > > > {
> > > > dnNoMembers
> > > > }
> > > > ]]>
> > > > </string>
> > > > </forceValues>
> > > >
> > > >
> > > >
> > > >
> > > > </dataset>
> > > >
> > > >
> > > >
> > > >
> > > > The error seems to be the java_script array which is given as value
> > > > instead of been taken as an multi valued attribute :
> > > > ..
> > > > uniqueMember: sun.org.mozilla.java_script.internal.NativeArray@78aa80
> > > >
> > > >
> > > >
> > > >
> > > > ...
> > > >
> > > > It doesn't appear if i change script with "dstMembers[0]" or
> > > > "dstMembers[1]" result. In that case it only synchronize the first
> > > > member or second member of the Active Directory group.
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > > Is there a way to increase java_script debugging output ?
> > > >
> > > > Thanks,
> > > >
> > > > --
> > > > Frederic Poisson
> > > >
> > > >
> > > >
> > > >
> > > >
> > > > _______________________________________________________________
> > > >
> > > > Ldap Synchronization Connector (LSC) - http://lsc-project.org
> > > >
> > > >
> > > >
> > > > lsc-users mailing list
> > > >
> > > > [email protected]
> > > >
> > > > http://lists.lsc-project.org/listinfo/lsc-users
> > > >
> > > >
> > > >
> > > >
> > >
> > >
> > >
> > >
> > >
> > >
> > --
> >
> >
> >
> >
> >
> >
> >
> >
> > Frederic
> > Poisson
> > ITD/I&E/ENG/MES/Messaging Engineering, LDAP/DNS Engineer
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > tel.
> > +33 2 23 28 42 67(tel:%2B33%202%2023%2028%2042%2067)
> > [email protected]
> >
> >
> > Cesson
> > Chene Germain 9 Rue du Chene Germain 35510 Cesson-Sevigne France
> > www.orange-business.com(http://www.orange-business.com/)
> >
> >
> >
> >
> >
> >
>
>
>
>
>
>
--
Frederic
Poisson
ITD/I&E/ENG/MES/Messaging Engineering, LDAP/DNS Engineer
tel.
+33 2 23 28 42 67
[email protected]
Cesson
Chene Germain 9 Rue du Chene Germain 35510 Cesson-Sevigne France
www.orange-business.com(http://www.orange-business.com/)
_______________________________________________________________
Ldap Synchronization Connector (LSC) - http://lsc-project.org
lsc-users mailing list
[email protected]
http://lists.lsc-project.org/listinfo/lsc-users