Azure / Azure/azure-documentdb-java
NullPointerException on readDocument()
- Dominant language
- Java
- Stars
- 51
- Forks
- 52
- PR merge metrics
- No merged PRs in 30d
Description
SDK Version: 1.16.0
We see following errors in logs:
```
java.lang.NullPointerException: null
at com.microsoft.azure.documentdb.internal.SessionContainer.compareAndSetToken(SessionContainer.java:194)
at com.microsoft.azure.documentdb.internal.SessionContainer.setSessionToken(SessionContainer.java:167)
at com.microsoft.azure.documentdb.internal.SessionContainer.setSessionToken(SessionContainer.java:156)
at com.microsoft.azure.documentdb.internal.SessionTokenHelper.captureSessionToken(SessionTokenHelper.java:138)
at com.microsoft.azure.documentdb.DocumentClient.captureSessionToken(DocumentClient.java:3155)
at com.microsoft.azure.documentdb.DocumentClient.doRead(DocumentClient.java:3054)
at com.microsoft.azure.documentdb.DocumentClient.readDocument(DocumentClient.java:1041)
at com.tomtom.lns.batch.dao.CosmosDBDao.getDocumentByBatchId(CosmosDBDao.java:358)
```
```
java.lang.NullPointerException: null
at java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.java:936)
at com.microsoft.azure.documentdb.internal.SessionContainer.getPartitionKeyRangeIdToTokenMap(SessionContainer.java:72)
at com.microsoft.azure.documentdb.internal.SessionContainer.resolveGlobalSessionToken(SessionContainer.java:88)
at com.microsoft.azure.documentdb.internal.SessionContainer.resolveGlobalSessionToken(SessionContainer.java:84)
at com.microsoft.azure.documentdb.DocumentClient.applySessionToken(DocumentClient.java:3143)
at com.microsoft.azure.documentdb.DocumentClient.doRead(DocumentClient.java:3051)
at com.microsoft.azure.documentdb.DocumentClient.readDocument(DocumentClient.java:1041)
at com.tomtom.lns.batch.dao.CosmosDBDao.getDocumentByBatchId(CosmosDBDao.java:358)
```
Our retrieve method:
```java
private Document getDocumentByBatchId(final DocumentClient client, final BatchId batchId) {
try {
final RequestOptions requestOptions = new RequestOptions();
requestOptions.setPartitionKey(new PartitionKey(batchId.getUuid().toString()));
requestOptions.setConsistencyLevel(ConsistencyLevel.Strong);
return client.readDocument(getBatchDocumentLink(batchId), requestOptions).getResource();
} catch (DocumentClientException e) {
if (e.getStatusCode() == HttpStatus.NOT_FOUND.value()) {
throw new BatchNotFoundException(batchId);
}
throw new IllegalStateException("Cannot fetch Batch document: " + batchId, e);
}
}
```
And for clarity getBatchDocumentLink() method:
```java
private static final String BATCH_DOCUMENT_LINK_TEMPLATE = "/dbs/BatchDB/colls/batches/docs/%s"
...
private String getBatchDocumentLink(final BatchId batchId) {
return String.format(BATCH_DOCUMENT_LINK_TEMPLATE, batchId.getUuid().toString());
}
```
Our DocumentClient is created by:
```java
private DocumentClient createDocumentClient(final String url, final String masterKey,
final ImmutableList preferredLocations) {
final ConnectionPolicy connectionPolicy = new ConnectionPolicy();
connectionPolicy.setEnableEndpointDiscovery(true);
connectionPolicy.setConnectionMode(ConnectionMode.DirectHttps);
connectionPolicy.setMaxPoolSize(CONNECTION_POOL_SIZE);
connectionPolicy.setPreferredLocations(preferredLocations);
return new DocumentClient(url, masterKey, connectionPolicy, ConsistencyLevel.Session);
}
```
Contributor guide
Assessment
This issue has not been assessed yet.