HaraldGustafsson opened a new issue #1633: Admin REST-API from a python client
URL: https://github.com/apache/incubator-pulsar/issues/1633
 
 
   #### Expected behavior
   
   I set up a standalone pulsar broker with SSL authentication and 
authorisation. I'm trying to write a python 3 admin-client using aiohttp. This 
works for get operations and other that don't need non-path arguments. But for 
a post operation the JSON seems to be malformed for the server. As an example:
   
       import asyncio
       import aiohttp
       import ssl
       import os
   
       async def go(loop):
           current_dir = os.path.abspath(os.path.dirname(__file__))
           sslcontext = 
ssl.create_default_context(cafile=os.path.join(current_dir, 'cacert.pem'))
           sslcontext.load_cert_chain(os.path.join(current_dir, 
'super-cert.pem'),
                                      os.path.join(current_dir, 
'super-key.pem'))
           async with aiohttp.ClientSession(loop=loop) as session:
               async with 
session.post('https://localhost:8081/admin/namespaces/sample/standalone/ns1/permissions/testrole',
                                        json={'actions': ['consume', 
'produce']}, ssl=sslcontext) as resp:
                    print(resp.status)
                    print(await resp.text())
               async with 
session.get('https://localhost:8081/admin/persistent/sample/standalone/ns1', 
ssl=sslcontext) as resp:
                   print(resp.status)
                   print(await resp.text())
   
       loop = asyncio.get_event_loop()
       loop.run_until_complete(go(loop))
       loop.close()
   
   Expected response is that it accepts the change as it does when from the 
pulsar-admin client. Also the documentation on the web don't include the 
non-path (i.e. body) parameters that should be included. Just got them from 
this line in the source code:
   
        request(path).post(Entity.entity(actions, MediaType.APPLICATION_JSON), 
ErrorData.class);
   
   #### Actual behavior
   Got this error on server:
   
       2018-04-23 09:09:26,082 - WARN  - [pulsar-web-70-21:ServletHandler@623] 
- 
       javax.servlet.ServletException: 
org.glassfish.jersey.server.ContainerException: 
com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize 
instance of `java.util.HashSet` out of START_OBJECT token
        at [Source: 
(org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$UnCloseableInputStream);
 line: 1, column: 1]
        at 
org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:489)
        at 
org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:427)
        at 
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:388)
        at 
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:341)
        at 
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:228)
        at 
org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:845)
        at 
org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1689)
        at 
org.apache.pulsar.broker.web.ResponseHandlerFilter.doFilter(ResponseHandlerFilter.java:53)
        at 
org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1676)
        at 
org.apache.pulsar.broker.web.AuthenticationFilter.doFilter(AuthenticationFilter.java:75)
        at 
org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1676)
        at 
org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:581)
        at 
org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:224)
        at 
org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1180)
        at 
org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:511)
        at 
org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)
        at 
org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1112)
        at 
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
        at 
org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:213)
        at 
org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:119)
        at 
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:134)
        at org.eclipse.jetty.server.Server.handle(Server.java:524)
        at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:319)
        at 
org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:253)
        at 
org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:273)
        at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:95)
        at 
org.eclipse.jetty.io.ssl.SslConnection.onFillable(SslConnection.java:202)
        at 
org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:273)
        at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:95)
        at 
org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint.java:93)
        at 
org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.executeProduceConsume(ExecuteProduceConsume.java:303)
        at 
org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceConsume(ExecuteProduceConsume.java:148)
        at 
org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(ExecuteProduceConsume.java:136)
        at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at 
io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
        at java.lang.Thread.run(Thread.java:748)
       Caused by: org.glassfish.jersey.server.ContainerException: 
com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize 
instance of `java.util.HashSet` out of START_OBJECT token
        at [Source: 
(org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$UnCloseableInputStream);
 line: 1, column: 1]
        at 
org.glassfish.jersey.servlet.internal.ResponseWriter.rethrow(ResponseWriter.java:278)
        at 
org.glassfish.jersey.servlet.internal.ResponseWriter.failure(ResponseWriter.java:260)
        at 
org.glassfish.jersey.server.ServerRuntime$Responder.process(ServerRuntime.java:509)
        at 
org.glassfish.jersey.server.ServerRuntime$2.run(ServerRuntime.java:334)
        at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271)
        at org.glassfish.jersey.internal.Errors$1.call(Errors.java:267)
        at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
        at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
        at org.glassfish.jersey.internal.Errors.process(Errors.java:267)
        at 
org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:317)
        at 
org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:305)
        at 
org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1154)
        at 
org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:473)
        ... 36 more
       Caused by: com.fasterxml.jackson.databind.exc.MismatchedInputException: 
Cannot deserialize instance of `java.util.HashSet` out of START_OBJECT token
        at [Source: 
(org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$UnCloseableInputStream);
 line: 1, column: 1]
        at 
com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:63)
        at 
com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1342)
        at 
com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1138)
        at 
com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1092)
        at 
com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.handleNonArray(CollectionDeserializer.java:336)
        at 
com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:264)
        at 
com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:244)
        at 
com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:27)
        at 
com.fasterxml.jackson.databind.ObjectReader._bind(ObjectReader.java:1574)
        at 
com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:965)
        at 
com.fasterxml.jackson.jaxrs.base.ProviderBase.readFrom(ProviderBase.java:815)
        at 
org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$TerminalReaderInterceptor.invokeReadFrom(ReaderInterceptorExecutor.java:256)
        at 
org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$TerminalReaderInterceptor.aroundReadFrom(ReaderInterceptorExecutor.java:235)
        at 
org.glassfish.jersey.message.internal.ReaderInterceptorExecutor.proceed(ReaderInterceptorExecutor.java:155)
        at 
org.glassfish.jersey.server.internal.MappableExceptionWrapperInterceptor.aroundReadFrom(MappableExceptionWrapperInterceptor.java:74)
        at 
org.glassfish.jersey.message.internal.ReaderInterceptorExecutor.proceed(ReaderInterceptorExecutor.java:155)
        at 
org.glassfish.jersey.message.internal.MessageBodyFactory.readFrom(MessageBodyFactory.java:1085)
        at 
org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:874)
        at 
org.glassfish.jersey.server.ContainerRequest.readEntity(ContainerRequest.java:271)
        at 
org.glassfish.jersey.server.internal.inject.EntityParamValueFactoryProvider$EntityValueFactory.provide(EntityParamValueFactoryProvider.java:96)
        at 
org.glassfish.jersey.server.spi.internal.ParamValueFactoryWithSource.provide(ParamValueFactoryWithSource.java:71)
        at 
org.glassfish.jersey.server.spi.internal.ParameterValueHelper.getParameterValues(ParameterValueHelper.java:94)
        at 
org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$AbstractMethodParamInvoker.getParamValues(JavaResourceMethodDispatcherProvider.java:127)
        at 
org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$VoidOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:143)
        at 
org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:99)
        at 
org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:389)
        at 
org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:347)
        at 
org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:102)
        at 
org.glassfish.jersey.server.ServerRuntime$2.run(ServerRuntime.java:326)
        ... 45 more
       2018-04-23 09:09:26,093 - WARN  - [pulsar-web-70-21:HttpChannel@479] - 
https://localhost:8081/admin/namespaces/sample/standalone/ns1/permissions/testrole
   
   
   #### Steps to reproduce
   
   Setup standalone pulsar with auth*, run above code with python 3.6.
   
   #### System configuration
   pulsar-1.22-incubating
   

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


With regards,
Apache Git Services

Reply via email to