syncope-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Francesco Chicchiriccò <ilgro...@apache.org>
Subject Re: Error when using Syncope rest client to update UserTO
Date Sun, 29 Oct 2017 07:12:38 GMT
On 2017-10-29 04:06 Anh Nguyen Tuan wrote:
> Hi Francesco,
> 
> I think this is because in rest method "update" you don't have
> @PathParam for {key}
> 
> org.apache.syncope.common.rest.api.service.AnyService (UserService
> extends AnyService)
>     @PATCH
>     @Path("{key}")
>     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML 
> })
>     @Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML 
> })
>     Response update(@NotNull P anyPatch);
> 
> Look at same issue at:
> http://mail-archives.apache.org/mod_mbox/cxf-dev/201207.mbox/%3CCABcEujvLKN1eHwtAWLHaib=NW+FZyDqZs4f1_=ktbFHVKmkBZQ@mail.gmail.com%3E
> 
> read method has PathParam defined so it works in my snippet.
>     @GET
>     @Path("{key}")
>     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML 
> })
>     TO read(@NotNull @PathParam("key") String key);

...and how would it work for everyone else here (including the Admin 
Console and the Enduser UI, which are "pure" REST clients to the Core), 
if that was the case? :-)

The actual point is that @PathParam is properly defined in the payload 
bean AnyPatch:

https://github.com/apache/syncope/blob/2_0_X/common/lib/src/main/java/org/apache/syncope/common/lib/patch/AnyPatch.java#L53

You can read more about this CXF feature at

https://cxf.apache.org/docs/jax-rs-basics.html#JAX-RSBasics-DealingwithParameters

As said below, I suspect that there is something that, with Karaf, 
somehow "blocks" such a CXF feature, resulting in the error you are 
getting.

Maybe Sergey can shed some light?

Regards.

> On 10/23/2017 1:34 PM, Francesco Chicchiriccò wrote:
>> Hi,
>> from the snippet and stacktrace below, I have some observations:
>> 
>> 1. why Syncope 2.0.1? it's one year old - FYI 2.0.6 was recently 
>> released, take a look at [1] to see how many issues were fixed ever 
>> since
>> 2. Syncope on Karaf? It sounds interesting, though I am sorry I've 
>> zero experience with OSGi in general and Syncope on Karaf in 
>> particular
>> 3. I also see Shiro involved: not sure how it comes into play
>> 4. the User creator is set once for all by a JPA listener, and cannot 
>> be normally altered via REST
>> 5. the actual error, e.g. "java.lang.IllegalArgumentException: 
>> Unresolved variables; only 0 value(s) given for 1 unique variable(s)" 
>> seems CXF-related, possibly to the fact that  the update method you 
>> are invoking [2] requires an explicit path parameter {key} which is 
>> not resolved at it should, e.g. by the value from the passed UserTO 
>> instance - but I'd suppose this is Karaf-specific
>> 
>> Regards.
>> 
>> [1] https://cwiki.apache.org/confluence/display/SYNCOPE/Jazz
>> [2] 
>> https://github.com/apache/syncope/blob/syncope-2.0.1/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/AnyService.java#L149
>> 
>> On 23/10/2017 04:52, Anh Nguyen Tuan wrote:
>>> Hi team,
>>> 
>>> I'm using Syncope 2.0.1 and Syncope client API 2.0.1 deployed in OSGI 
>>> environment (Karaf 4.0.4). When I read a user and update it as 
>>> following:
>>>         UserService userService = 
>>> m_syncopeServiceFactory.getUserService();
>>>         UserTO user = 
>>> m_syncopeServiceFactory.getUserService().read(username);
>>>         user.setCreator("test");
>>>         userService.update(user);
>>> 
>>> I'm getting this error:
>>> 2017-10-22 15:52:31,197 | WARN  | tp304587724-1277 | 
>>> AbstractAuthenticator            | 342 - org.apache.shiro.core - 
>>> 1.3.2 | Authentication failed for token submission 
>>> [org.apache.shiro.authc.UsernamePasswordToken - adminuser, 
>>> rememberMe=false (192.168.92.41)].  Possible unexpected error? 
>>> (Typical or expected login exceptions should extend from 
>>> AuthenticationException).
>>> java.lang.reflect.UndeclaredThrowableException
>>>     at com.sun.proxy.$Proxy96.update(Unknown 
>>> Source)[420:security-app:1.0.0.SNAPSHOT]
>>>     at 
>>> com.nokia.anv.app.security.SyncopeUserRealm.doGetAuthenticationInfo(SyncopeUserRealm.java:69)[420:security-app:1.0.0.SNAPSHOT]
>>>     at 
>>> org.apache.shiro.realm.AuthenticatingRealm.getAuthenticationInfo(AuthenticatingRealm.java:568)[342:org.apache.shiro.core:1.3.2]
>>>     at 
>>> org.apache.shiro.authc.pam.ModularRealmAuthenticator.doSingleRealmAuthentication(ModularRealmAuthenticator.java:180)[342:org.apache.shiro.core:1.3.2]
>>>     at 
>>> org.apache.shiro.authc.pam.ModularRealmAuthenticator.doAuthenticate(ModularRealmAuthenticator.java:267)[342:org.apache.shiro.core:1.3.2]
>>>     at 
>>> org.apache.shiro.authc.AbstractAuthenticator.authenticate(AbstractAuthenticator.java:198)[342:org.apache.shiro.core:1.3.2]
>>>     at 
>>> org.apache.shiro.mgt.AuthenticatingSecurityManager.authenticate(AuthenticatingSecurityManager.java:106)[342:org.apache.shiro.core:1.3.2]
>>>     at 
>>> org.apache.shiro.mgt.DefaultSecurityManager.login(DefaultSecurityManager.java:270)[342:org.apache.shiro.core:1.3.2]
>>>     at 
>>> org.apache.shiro.subject.support.DelegatingSubject.login(DelegatingSubject.java:256)[342:org.apache.shiro.core:1.3.2]
>>>     at 
>>> org.apache.shiro.web.filter.authc.AuthenticatingFilter.executeLogin(AuthenticatingFilter.java:53)[344:org.apache.shiro.web:1.3.2]
>>>     at 
>>> org.apache.shiro.web.filter.authc.FormAuthenticationFilter.onAccessDenied(FormAuthenticationFilter.java:154)[344:org.apache.shiro.web:1.3.2]
>>>     at 
>>> org.apache.shiro.web.filter.AccessControlFilter.onAccessDenied(AccessControlFilter.java:133)[344:org.apache.shiro.web:1.3.2]
>>>     at 
>>> org.apache.shiro.web.filter.AccessControlFilter.onPreHandle(AccessControlFilter.java:162)[344:org.apache.shiro.web:1.3.2]
>>>     at 
>>> org.apache.shiro.web.filter.PathMatchingFilter.isFilterChainContinued(PathMatchingFilter.java:203)[344:org.apache.shiro.web:1.3.2]
>>>     at 
>>> org.apache.shiro.web.filter.PathMatchingFilter.preHandle(PathMatchingFilter.java:178)[344:org.apache.shiro.web:1.3.2]
>>>     at 
>>> org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:131)[344:org.apache.shiro.web:1.3.2]
>>>     at 
>>> org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)[344:org.apache.shiro.web:1.3.2]
>>>     at 
>>> org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)[344:org.apache.shiro.web:1.3.2]
>>>     at 
>>> org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449)[344:org.apache.shiro.web:1.3.2]
>>>     at 
>>> org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365)[344:org.apache.shiro.web:1.3.2]
>>>     at 
>>> org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)[342:org.apache.shiro.core:1.3.2]
>>>     at 
>>> org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)[342:org.apache.shiro.core:1.3.2]
>>>     at 
>>> org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:383)[342:org.apache.shiro.core:1.3.2]
>>>     at 
>>> org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362)[344:org.apache.shiro.web:1.3.2]
>>>     at 
>>> org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)[344:org.apache.shiro.web:1.3.2]
>>>     at 
>>> org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)[78:org.eclipse.jetty.servlet:9.2.14.v20151106]
>>>     at 
>>> org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:585)[78:org.eclipse.jetty.servlet:9.2.14.v20151106]
>>>     at 
>>> org.ops4j.pax.web.service.jetty.internal.HttpServiceServletHandler.doHandle(HttpServiceServletHandler.java:70)[108:org.ops4j.pax.web.pax-web-jetty:4.2.4]
>>>     at 
>>> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)[77:org.eclipse.jetty.server:9.2.14.v20151106]
>>>     at 
>>> org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:577)[76:org.eclipse.jetty.security:9.2.14.v20151106]
>>>     at 
>>> org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:223)[77:org.eclipse.jetty.server:9.2.14.v20151106]
>>>     at 
>>> org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127)[77:org.eclipse.jetty.server:9.2.14.v20151106]
>>>     at 
>>> org.ops4j.pax.web.service.jetty.internal.HttpServiceContext.doHandle(HttpServiceContext.java:271)[108:org.ops4j.pax.web.pax-web-jetty:4.2.4]
>>>     at 
>>> org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515)[78:org.eclipse.jetty.servlet:9.2.14.v20151106]
>>>     at 
>>> org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)[77:org.eclipse.jetty.server:9.2.14.v20151106]
>>>     at 
>>> org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061)[77:org.eclipse.jetty.server:9.2.14.v20151106]
>>>     at 
>>> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)[77:org.eclipse.jetty.server:9.2.14.v20151106]
>>>     at 
>>> org.ops4j.pax.web.service.jetty.internal.JettyServerHandlerCollection.handle(JettyServerHandlerCollection.java:80)[108:org.ops4j.pax.web.pax-web-jetty:4.2.4]
>>>     at 
>>> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)[77:org.eclipse.jetty.server:9.2.14.v20151106]
>>>     at 
>>> org.eclipse.jetty.server.Server.handle(Server.java:499)[77:org.eclipse.jetty.server:9.2.14.v20151106]
>>>     at 
>>> org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:311)[77:org.eclipse.jetty.server:9.2.14.v20151106]
>>>     at 
>>> org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257)[77:org.eclipse.jetty.server:9.2.14.v20151106]
>>>     at 
>>> org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:544)[69:org.eclipse.jetty.io:9.2.14.v20151106]
>>>     at 
>>> org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)[80:org.eclipse.jetty.util:9.2.14.v20151106]
>>>     at 
>>> org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)[80:org.eclipse.jetty.util:9.2.14.v20151106]
>>>     at java.lang.Thread.run(Thread.java:745)[:1.8.0_40]
>>> Caused by: java.lang.reflect.InvocationTargetException
>>>     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native 
>>> Method)[:1.8.0_40]
>>>     at 
>>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)[:1.8.0_40]
>>>     at 
>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)[:1.8.0_40]
>>>     at java.lang.reflect.Method.invoke(Method.java:497)[:1.8.0_40]
>>>     at 
>>> com.nokia.anv.app.security.SyncopeServiceInvocationHandler.invoke(SyncopeServiceInvocationHandler.java:21)[420:security-app:1.0.0.SNAPSHOT]
>>>     ... 46 more
>>> Caused by: java.lang.IllegalArgumentException: Unresolved variables; 
>>> only 0 value(s) given for 1 unique variable(s)
>>>     at 
>>> org.apache.cxf.jaxrs.impl.UriBuilderImpl.substituteVarargs(UriBuilderImpl.java:285)
>>>     at 
>>> org.apache.cxf.jaxrs.impl.UriBuilderImpl.doBuildUriParts(UriBuilderImpl.java:121)
>>>     at 
>>> org.apache.cxf.jaxrs.impl.UriBuilderImpl.doBuild(UriBuilderImpl.java:101)
>>>     at 
>>> org.apache.cxf.jaxrs.impl.UriBuilderImpl.buildFromEncoded(UriBuilderImpl.java:230)
>>>     at 
>>> org.apache.cxf.jaxrs.client.ClientProxyImpl.invoke(ClientProxyImpl.java:180)
>>>     at com.sun.proxy.$Proxy86.update(Unknown Source)
>>>     ... 51 more
>>> 
>>> I seem to be some issue when passing key to CXF, can you please have 
>>> a look?
>>> 
>>> Regards,
>>> Anh
>> 
-- 
Francesco Chicchiriccò

Tirasa - Open Source Excellence
http://www.tirasa.net/

Member at The Apache Software Foundation
Syncope, Cocoon, Olingo, CXF, OpenJPA, PonyMail
http://home.apache.org/~ilgrosso/

Mime
View raw message