From dev-return-16932-archive-asf-public=cust-asf.ponee.io@syncope.apache.org Tue Jan 29 18:02:05 2019 Return-Path: X-Original-To: archive-asf-public@cust-asf.ponee.io Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by mx-eu-01.ponee.io (Postfix) with SMTP id 77C6018067B for ; Tue, 29 Jan 2019 18:02:04 +0100 (CET) Received: (qmail 82741 invoked by uid 500); 29 Jan 2019 17:02:03 -0000 Mailing-List: contact dev-help@syncope.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@syncope.apache.org Delivered-To: mailing list dev@syncope.apache.org Received: (qmail 82728 invoked by uid 99); 29 Jan 2019 17:02:03 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd1-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 29 Jan 2019 17:02:03 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd1-us-west.apache.org (ASF Mail Server at spamd1-us-west.apache.org) with ESMTP id 30180C6447 for ; Tue, 29 Jan 2019 17:02:03 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd1-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: -109.501 X-Spam-Level: X-Spam-Status: No, score=-109.501 tagged_above=-999 required=6.31 tests=[ENV_AND_HDR_SPF_MATCH=-0.5, KAM_ASCII_DIVIDERS=0.8, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001, USER_IN_DEF_SPF_WL=-7.5, USER_IN_WHITELIST=-100] autolearn=disabled Received: from mx1-lw-us.apache.org ([10.40.0.8]) by localhost (spamd1-us-west.apache.org [10.40.0.7]) (amavisd-new, port 10024) with ESMTP id dusSnTEtwKP9 for ; Tue, 29 Jan 2019 17:02:01 +0000 (UTC) Received: from mailrelay1-us-west.apache.org (mailrelay1-us-west.apache.org [209.188.14.139]) by mx1-lw-us.apache.org (ASF Mail Server at mx1-lw-us.apache.org) with ESMTP id 4B9C960E14 for ; Tue, 29 Jan 2019 17:02:01 +0000 (UTC) Received: from jira-lw-us.apache.org (unknown [207.244.88.139]) by mailrelay1-us-west.apache.org (ASF Mail Server at mailrelay1-us-west.apache.org) with ESMTP id C67B9E0E04 for ; Tue, 29 Jan 2019 17:02:00 +0000 (UTC) Received: from jira-lw-us.apache.org (localhost [127.0.0.1]) by jira-lw-us.apache.org (ASF Mail Server at jira-lw-us.apache.org) with ESMTP id 4F795243AE for ; Tue, 29 Jan 2019 17:02:00 +0000 (UTC) Date: Tue, 29 Jan 2019 17:02:00 +0000 (UTC) From: =?utf-8?Q?Francesco_Chicchiricc=C3=B2_=28JIRA=29?= To: dev@syncope.apache.org Message-ID: In-Reply-To: References: Subject: [jira] [Resolved] (SYNCOPE-1430) ItemTransformer for Date schemas throws NPE MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394 [ https://issues.apache.org/jira/browse/SYNCOPE-1430?page=3Dcom.atlass= ian.jira.plugin.system.issuetabpanels:all-tabpanel ] Francesco Chicchiricc=C3=B2 resolved SYNCOPE-1430. --------------------------------------------- Resolution: Fixed > ItemTransformer for Date schemas throws NPE=20 > -------------------------------------------- > > Key: SYNCOPE-1430 > URL: https://issues.apache.org/jira/browse/SYNCOPE-1430 > Project: Syncope > Issue Type: Bug > Components: core > Affects Versions: 2.0.12, 2.1.3 > Reporter: Andrea Patricelli > Assignee: Francesco Chicchiricc=C3=B2 > Priority: Major > Fix For: 2.0.13, 2.1.4, 3.0.0 > > > # Login as admin to console > # Define a connector and a resource (say resource-ldap on embedded mode)= .=C2=A0 > # Create a USER mapping and map, for example, a Date attribute (say login= Date) with a string value on the resource (say street on ldap, does not mat= ter the meaning) > # Define a JEXL transformer for that mapping row like this=C2=A0 > {code:java} > value.toString().contains("T") ? value.toString().split("T")[0].replaceAl= l("-", "") : value=C2=A0=C2=A0{code} > Or a Java/Groovy transformer with this beforePropagation: > {code:java} > public List beforePropagation( > final Item item,=20 > final Entity entity,=20 > final List values) { > =20 > if (values !=3D null && !values.isEmpty()) { > values.forEach(value -> { > Date originalValue =3D value.getDateValue(); > if (originalValue !=3D null) { > value.setBinaryValue(null); > value.setBooleanValue(null); > value.setDateValue(null); > value.setDoubleValue(null); > value.setLongValue(null); > value.setStringValue(makeSomeChanges(values.get(0).ge= tDateValue())); > } > }); > } > return values; > } > {code} > You will notice that the value propagated is not the=C2=A0one changed by = the transformer, sometimes (like this case) you'll get an NPE: > {code} > 14:40:47.203 ERROR org.apache.syncope.core.provisioning.api.MappingManage= r - Expression 'loginDate' processing failed > java.lang.NullPointerException: null > at java.util.Calendar.setTime(Calendar.java:1770) ~[?:1.8.0_191] > at java.text.SimpleDateFormat.format(SimpleDateFormat.java:943) ~= [?:1.8.0_191] > at java.text.SimpleDateFormat.format(SimpleDateFormat.java:936) ~= [?:1.8.0_191] > at java.text.DateFormat.format(DateFormat.java:345) ~[?:1.8.0_191= ] > at org.apache.syncope.core.provisioning.api.utils.FormatUtils.for= mat(FormatUtils.java:72) ~[syncope-core-provisioning-api-2.1.3.jar:2.1.3] > at org.apache.syncope.core.provisioning.api.utils.FormatUtils.for= mat(FormatUtils.java:58) ~[syncope-core-provisioning-api-2.1.3.jar:2.1.3] > at org.apache.syncope.core.provisioning.api.utils.FormatUtils.for= mat(FormatUtils.java:54) ~[syncope-core-provisioning-api-2.1.3.jar:2.1.3] > at org.apache.syncope.core.persistence.jpa.entity.AbstractPlainAt= trValue.getValueAsString(AbstractPlainAttrValue.java:233) ~[syncope-core-pe= rsistence-jpa-2.1.3.jar:2.1.3] > at org.apache.syncope.core.persistence.jpa.entity.AbstractPlainAt= trValue.getValueAsString(AbstractPlainAttrValue.java:273) ~[syncope-core-pe= rsistence-jpa-2.1.3.jar:2.1.3] > at org.apache.syncope.core.provisioning.java.MappingManagerImpl.p= repareAttr(MappingManagerImpl.java:365) ~[syncope-core-provisioning-java-2.= 1.3.jar:2.1.3] > at org.apache.syncope.core.provisioning.java.MappingManagerImpl.p= repareAttrs(MappingManagerImpl.java:178) ~[syncope-core-provisioning-java-2= .1.3.jar:2.1.3] > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[= ?:1.8.0_191] > at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccess= orImpl.java:62) ~[?:1.8.0_191] > at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMeth= odAccessorImpl.java:43) ~[?:1.8.0_191] > at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_191= ] > at org.springframework.aop.support.AopUtils.invokeJoinpointUsingR= eflection(AopUtils.java:343) ~[spring-aop-5.1.4.RELEASE.jar:5.1.4.RELEASE] > at org.springframework.aop.framework.ReflectiveMethodInvocation.i= nvokeJoinpoint(ReflectiveMethodInvocation.java:198) ~[spring-aop-5.1.4.RELE= ASE.jar:5.1.4.RELEASE] > at org.springframework.aop.framework.ReflectiveMethodInvocation.p= roceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-5.1.4.RELEASE.jar:= 5.1.4.RELEASE] > at org.springframework.transaction.interceptor.TransactionAspectS= upport.invokeWithinTransaction(TransactionAspectSupport.java:294) ~[spring-= tx-5.1.4.RELEASE.jar:5.1.4.RELEASE] > at org.springframework.transaction.interceptor.TransactionInterce= ptor.invoke(TransactionInterceptor.java:98) ~[spring-tx-5.1.4.RELEASE.jar:5= .1.4.RELEASE] > at org.apache.syncope.core.persistence.jpa.spring.DomainTransacti= onInterceptor.invoke(DomainTransactionInterceptor.java:60) ~[syncope-core-p= ersistence-jpa-2.1.3.jar:2.1.3] > at org.springframework.aop.framework.ReflectiveMethodInvocation.p= roceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.1.4.RELEASE.jar:= 5.1.4.RELEASE] > at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(Jd= kDynamicAopProxy.java:212) ~[spring-aop-5.1.4.RELEASE.jar:5.1.4.RELEASE] > at com.sun.proxy.$Proxy632.prepareAttrs(Unknown Source) ~[?:?] > at org.apache.syncope.core.provisioning.java.propagation.Propagat= ionManagerImpl.lambda$createTasks$4(PropagationManagerImpl.java:396) ~[sync= ope-core-provisioning-java-2.1.3.jar:2.1.3] > at java.util.HashMap.forEach(HashMap.java:1289) ~[?:1.8.0_191] > at org.apache.syncope.core.provisioning.java.propagation.Propagat= ionManagerImpl.createTasks(PropagationManagerImpl.java:368) ~[syncope-core-= provisioning-java-2.1.3.jar:2.1.3] > at org.apache.syncope.core.provisioning.java.propagation.Propagat= ionManagerImpl.getUpdateTasks(PropagationManagerImpl.java:265) ~[syncope-co= re-provisioning-java-2.1.3.jar:2.1.3] > at org.apache.syncope.core.provisioning.java.propagation.Propagat= ionManagerImpl.getUserUpdateTasks(PropagationManagerImpl.java:197) ~[syncop= e-core-provisioning-java-2.1.3.jar:2.1.3] > at org.apache.syncope.core.provisioning.java.propagation.Propagat= ionManagerImpl.getUserUpdateTasks(PropagationManagerImpl.java:217) ~[syncop= e-core-provisioning-java-2.1.3.jar:2.1.3] > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[= ?:1.8.0_191] > at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccess= orImpl.java:62) ~[?:1.8.0_191] > at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMeth= odAccessorImpl.java:43) ~[?:1.8.0_191] > at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_191= ] > at org.springframework.aop.support.AopUtils.invokeJoinpointUsingR= eflection(AopUtils.java:343) ~[spring-aop-5.1.4.RELEASE.jar:5.1.4.RELEASE] > at org.springframework.aop.framework.ReflectiveMethodInvocation.i= nvokeJoinpoint(ReflectiveMethodInvocation.java:198) ~[spring-aop-5.1.4.RELE= ASE.jar:5.1.4.RELEASE] > at org.springframework.aop.framework.ReflectiveMethodInvocation.p= roceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-5.1.4.RELEASE.jar:= 5.1.4.RELEASE] > at org.springframework.transaction.interceptor.TransactionAspectS= upport.invokeWithinTransaction(TransactionAspectSupport.java:294) ~[spring-= tx-5.1.4.RELEASE.jar:5.1.4.RELEASE] > at org.springframework.transaction.interceptor.TransactionInterce= ptor.invoke(TransactionInterceptor.java:98) ~[spring-tx-5.1.4.RELEASE.jar:5= .1.4.RELEASE] > at org.apache.syncope.core.persistence.jpa.spring.DomainTransacti= onInterceptor.invoke(DomainTransactionInterceptor.java:60) ~[syncope-core-p= ersistence-jpa-2.1.3.jar:2.1.3] > at org.springframework.aop.framework.ReflectiveMethodInvocation.p= roceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.1.4.RELEASE.jar:= 5.1.4.RELEASE] > at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(Jd= kDynamicAopProxy.java:212) ~[spring-aop-5.1.4.RELEASE.jar:5.1.4.RELEASE] > at com.sun.proxy.$Proxy697.getUserUpdateTasks(Unknown Source) ~[?= :?] > at org.apache.syncope.core.provisioning.java.DefaultUserProvision= ingManager.update(DefaultUserProvisioningManager.java:118) ~[syncope-core-p= rovisioning-java-2.1.3.jar:2.1.3] > at org.apache.syncope.core.provisioning.java.DefaultUserProvision= ingManager.update(DefaultUserProvisioningManager.java:58) ~[syncope-core-pr= ovisioning-java-2.1.3.jar:2.1.3] > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[= ?:1.8.0_191] > at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccess= orImpl.java:62) ~[?:1.8.0_191] > at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMeth= odAccessorImpl.java:43) ~[?:1.8.0_191] > at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_191= ] > at org.springframework.aop.support.AopUtils.invokeJoinpointUsingR= eflection(AopUtils.java:343) ~[spring-aop-5.1.4.RELEASE.jar:5.1.4.RELEASE] > at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(Jd= kDynamicAopProxy.java:206) ~[spring-aop-5.1.4.RELEASE.jar:5.1.4.RELEASE] > {code} -- This message was sent by Atlassian JIRA (v7.6.3#76005)