[ https://issues.apache.org/jira/browse/SYNCOPE-381?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Massimiliano Perrone resolved SYNCOPE-381. ------------------------------------------ Resolution: Fixed Committed revision 1488291. > Adding and saving roles with resources during save > -------------------------------------------------- > > Key: SYNCOPE-381 > URL: https://issues.apache.org/jira/browse/SYNCOPE-381 > Project: Syncope > Issue Type: Bug > Components: console > Affects Versions: 1.1.1 > Environment: Glassfish > Reporter: Nik Tetteh-Lartey > Assignee: Massimiliano Perrone > Priority: Minor > Fix For: 1.1.2, 1.2.0 > > > add a new role which is connected to an ldap by a resource connector. > Then after pressing save the role popup window appears hung, so press save > several times and eventually use the x to cancel. > You end up with many duplicate roles. If you delete all the duplicates until > you end with one role and then try and create a new role we get the following > exception thrown: > 2013-05-31 11:13:07.514+0200 (21) StandardWrapperValve[syncope-core-rest]: > PWC1406: Servlet.service() for servlet syncope-core-rest threw exception > org.apache.syncope.core.persistence.dao.NotFoundException: Role 101 > at > org.apache.syncope.core.rest.data.RoleDataBinder.getRoleFromId(RoleDataBinder.java:73) > at > org.apache.syncope.core.rest.data.RoleDataBinder$$FastClassByCGLIB$$75f19568.invoke(<generated>) > at > org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) > at > org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:698) > at > org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150) > at > org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:96) > at > org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:260) > at > org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:94) > at > org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) > at > org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:631) > at > org.apache.syncope.core.rest.data.RoleDataBinder$$EnhancerByCGLIB$$bff86965.getRoleFromId(<generated>) > at > org.apache.syncope.core.rest.controller.RoleController.read(RoleController.java:109) > at > org.apache.syncope.core.rest.controller.RoleController$$FastClassByCGLIB$$77c6d55e.invoke(<generated>) > at > org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) > at > org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:698) > at > org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150) > at > org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:96) > at > org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:260) > at > org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:94) > at > org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) > at > org.springframework.security.access.intercept.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:64) > at > org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) > at > org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:631) > at > org.apache.syncope.core.rest.controller.RoleController$$EnhancerByCGLIB$$1acaf620.read(<generated>) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) > at java.lang.reflect.Method.invoke(Method.java:597) > at > org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176) > at > org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:440) > at > org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:428) > at > org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925) > at > org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856) > at > org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:936) > at > org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:827) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:668) > at > org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:770) > at > org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1542) > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:343) > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217) > at > org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) > at > org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118) > at > org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84) > at > org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) > at > org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) > at > org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) > at > org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103) > at > org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) > at > org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113) > at > org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) > at > org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54) > at > org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) > at > org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45) > at > org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) > at > org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:201) > at > org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) > at > org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87) > at > org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) > at > org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192) > at > org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160) > at > org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) > at > org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259) > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256) > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217) > at > org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) > at > org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256) > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217) > at > org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279) > at > org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) > at > org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655) > at > org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595) > at > org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161) > at > org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331) > at > org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231) > at > com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317) > at > com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195) > at > com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:849) > at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:746) > at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1045) > at > com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:228) > at > com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137) > at > com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104) > at > com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90) > at > com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79) > at > com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54) > at > com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59) > at com.sun.grizzly.ContextTask.run(ContextTask.java:71) > at > com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532) > at > com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513) > at java.lang.Thread.run(Thread.java:662) > WORKAROUND: > Use the command REST interface: > e.g. > [nik@anvil idmRBAC]$ curl -u admin:passwoX POST > http://10.0.0.183:9090/syncope/cxf/roles --data > "<role><name>babar6</name></role>" -H "Content-type: application/xml" -D > /tmp/headers <?xml version="1.0" encoding="UTF-8" standalone="yes"?> > <role> > <attributes/> > <derivedAttributes/> > <id>117</id> > <propagationStatuses/> > <resources/> > <virtualAttributes/> > <entitlements/> > <inheritAccountPolicy>false</inheritAccountPolicy> > <inheritAttributes>false</inheritAttributes> > <inheritDerivedAttributes>false</inheritDerivedAttributes> > <inheritOwner>false</inheritOwner> > <inheritPasswordPolicy>false</inheritPasswordPolicy> > <inheritVirtualAttributes>false</inheritVirtualAttributes> > <name>babar6</name> > <parent>0</parent> > </role> > [nik@anvil idmRBAC]$ curl -u admin:password -H "Content-Type: > application/json" -X GET http://10.0.0.183:9090/syncope/cxf/roles/{117} > <?xml version="1.0" encoding="UTF-8" standalone="yes"?> > <role> > <attributes/> > <derivedAttributes/> > <id>117</id> > <propagationStatuses/> > <resources/> > <virtualAttributes/> > <entitlements/> > <inheritAccountPolicy>false</inheritAccountPolicy> > <inheritAttributes>false</inheritAttributes> > <inheritDerivedAttributes>false</inheritDerivedAttributes> > <inheritOwner>false</inheritOwner> > <inheritPasswordPolicy>false</inheritPasswordPolicy> > <inheritVirtualAttributes>false</inheritVirtualAttributes> > <name>babar6</name> > <parent>0</parent> > </role> > [nik@anvil idmRBAC]$ -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira