Gremlin群集/连接没有错误的凭据失败

时间:2018-05-23 20:57:34

标签: java azure-cosmosdb gremlin

代码要求:

  • 用户通过/ database // collection // entities
  • 的url模式点击服务
  • Java尝试连接到该特定数据库&通过Gremlin收集。如果连接失败,则将错误返回给用户
  • 如果连接成功,Java将运行预构建的查询并将结果返回给用户。

我面临的问题:使用位于https://github.com/Azure-Samples/azure-cosmos-db-graph-java-getting-started/blob/master/src/GetStarted/Program.java的教程,我正在构建一个群集,然后使用正确的凭据构建一个客户端对象;因为当所有配置都正确时,它没有任何问题。但是,如果我更改任何参数,DATABASE_ID,COLLECTION_ID或PASSWORD,代码将继续通过群集的构建并通过运行connect()的群集,直到它尝试运行“client.submit(query)”,它将返回NullPointerException 。

问题:是否有一个内置于群集或客户端对象中的方法,如果已成功通过身份验证,则会返回该方法。

CODE CONSOLE:

DATABSE_ID:PURPOSELY_WRONG_DB
COLLECTION_ID:PURPOSELY_WRONG_COLLECTION
PASSWORD:PURPOSELY_WRONG_PASSWORD_TO_TEST_IF_CONNECTION_THROWS_ERROR
QUERY:g.V().count()
START QUERYING GREMLIN SERVER
AT THIS POINT I HAVE PASSED CLIENT.CONNECT()
ABOUT TO SUBMIT THE QUERY.....
java.lang.NullPointerException: null
        at org.apache.tinkerpop.gremlin.driver.Handler$GremlinResponseHandler.channelRead0(Handler.java:239)
        at org.apache.tinkerpop.gremlin.driver.Handler$GremlinResponseHandler.channelRead0(Handler.java:195)
        at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:367)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:353)
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:346)

1 个答案:

答案 0 :(得分:0)

Gremlin Server协议使用SASL-based authentication,并且在发送第一个请求时开始验证。

基本握手顺序如下:

  1. 服务器收到新连接的请求。
  2. 服务器发送身份验证质询。
  3. 客户端使用凭据发送身份验证响应。
  4. 服务器检查凭据,并使用原始请求的结果进行响应或返回无效的creds响应。
  5. 但是,不期望空指针异常。

    你能提供:

    • 您正在使用的gremlin-java客户端版本?
    • 重新解决问题的示例。
    • 如果可能,GremlinResponseHandler试图读取的响应消息?

    另请参阅Gremlin请求/响应参考here