- [NEW] Add IAM cookie authentication method.
- [IMPROVED] Clarified documentation for search indexes.
- [FIXED] Connection leaks in some session renewal error scenarios.
- [UPGRADED] Optional OkHttp dependency to version 3.8.1.
- [NEW] Add faceted search variable argument to
drillDown
method allowing multiple drill down values to be specified for a single field name. - [DEPRECATED] The
drillDown(String, String)
method. Use newdrillDown(String, String...)
which allows multiple drill down values.
- [NEW] Added
bluemix
method to the client builder allowing service credentials to be passed using the CloudFoundry VCAP_SERVICES environment variable. - [NEW] Add additional method to
GET
standalone attachments. - [IMPROVED] Faster shutdown when using the optional OkHttp client.
- [IMPROVED] Add URL to
CouchDbException
exception message (where applicable) for easier debugging. - [FIXED] Issue with "+" (plus) not being regarded as a reserved character in URI path components.
- [FIXED] Issue with double encoding of restricted URL characters in credentials when using
ClientBuilder.url()
.
- [UPGRADED] Optional okhttp dependency to version 3.4.2.
- [FIXED]
NullPointerException
when callingAllDocsResponse.getIdsAndRevs
for a request with multiple non-existent keys (IDs). - [IMPROVED] Preserved path elements from
URL
s used to construct aClientBuilder
. This allows, for example, aCloudantClient
connection to use a gateway with aURL
likehttps://testproxy.example.net:443/cloudant/mydb
. - [FIXED] Issue where DesignDocumentManager did not close a
FileInputStream
.
- [FIX]
NoClassDefFoundError: com.squareup.okhttp.Authenticator
for version 2.6.1 if the optional okhttp dependency was not included.
- [FIX]
NoClassDefFoundError: com.squareup.okhttp.Authenticator
for version 2.6.0 if the optional okhttp dependency was not included.
- [NEW] Enabled
reduce
and other reduce related parameters to be set when usingMultipleRequestBuilder
. - [FIX] Consumed response streams in
client.shutdown()
andCookieInterceptor
to prevent connection leaks. - [NEW] Added functionality to remove attachment from document by attachment name.
- [FIX] Issue authenticating with a proxy server when connecting to a HTTPS database server.
- [FIX] Throw an
IllegalArgumentException
if using an unsupported proxy type. - [IMPROVED] Documentation for connecting to and authenticating with proxy servers.
- [FIX]
java.lang.StringIndexOutOfBoundsException
when trying to parseSet-Cookie
headers. - [FIX]
NullPointerException
inCookieInterceptor
when no body was present on response. - [UPGRADED] Upgraded GSON to 2.7
- [IMPROVED] Added warning messages for JVM DNS cache configuration settings that could impede client operation during cluster failover.
- [IMPROVED] Made the 429 response code backoff optional and configurable. To enable the backoff add
an instance of a
Replay429Interceptor
with the desired number of retries and initial backoff:ClientBuilder.account("example").interceptors(new Replay429Interceptor(retries, initialBackoff))
A default instance is available using 3 retries and starting with a 250 ms backoff:Replay429Interceptor.WITH_DEFAULTS
. To replicate the backoff of version 2.5.0 create an instance usingnew Replay429Interceptor(10, 250l)
. - [FIX] Fixed places where streams where not closed and could cause connections to leak.
- [NEW] Handle HTTP status code
429 Too Many Requests
with blocking backoff and retries. - [NEW] Added
DesignDocumentManager.list()
to return all design documents defined in a database. - [NEW] Added an optional
SettableViewParameters.STALE_NO
constant for the default omitted case of the stale parameter on a view request. - [NEW] Added
descending
option for changes feed. - [NEW] Added
parameter
option for changes feed to allow specifying a custom query parameter on the request for example to be used by a filter function. - [NEW] Added HttpConnection logging filters for HTTP request method and URL regex.
- [IMPROVED] Added additional logging output and documentation.
- [IMPROVED] Documentation for
Replication
class. - [FIX]
JsonSyntaxException
when deserializing Cloudant query language generated design documents into theDesignDocument
class. - [FIX]
PreconditionFailedException
was never thrown when callingcreateDB("dbname")
when the database already existed. - [FIX] Documentation that suggested calling
database("dbname", false)
would immediately throw aNoDocumentException
if the database did not exist. The exception is not thrown until the first operation on theDatabase
instance. - [FIX]
ClassCastException
when the server responded403
with anull
reason in the JSON.
- [IMPROVED] Reduced the length of the User-Agent header string.
- [IMPROVED] Use a more efficient HEAD request for getting revision information when using
DesignDocumentManager.remove(String id)
. - [FIX] Regression where
_design/
was not optional in ID when usingDesignDocumentManager
methods. - [FIX] Issue where
use_index
was specified as an array instead of a string when only a design document name was provided. - [FIX] Issue where empty array was passed for
use_index
option whenFindByIndexOptions.useIndex()
was not used. - [FIX] Incorrect method names in overview documentation example for connecting to Cloudant service.
- [IMPROVED] Use the JVM default chunk size for HTTP content of unknown length.
- [FIX] Regression where
JsonParseException
would be thrown ifDatabase.findByIndex
selector contained leading whitespace.
- [NEW] Documentation for logging in project javadoc
overview.html
. - [UPGRADED] Upgraded optional okhttp to 2.7.5.
- [FIX] Issues with the changes feed, replication, or getting database info when using Cloudant Data Layer Local Edition because sequence IDs were incorrectly always treated as strings not JSON.
- [FIX] Issue of
javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
on IBM Java with okhttp. SSL connections using okhttp are now configured to use the JVM enabled protocols and cipher suites in the same way as theHttpURLConnection
. - [FIX] Issue where a
java.net.ProtocolException
was thrown if the cookie had expired when a request that included a body was sent. Note that the client no longer uses theExpect:100-continue
header on requests. - [FIX] Fix issue where design documents would not be updated if only the
indexes
field was updated. - [FIX] The
equals
andhashcode
methods forDocument
andReplicatorDocument
failed to compare revision identifier and some other fields. - [FIX] Issue where connections could leak because streams were not closed.
- [DEPRECATED] The
InputStream
settersHttpConnection.setRequestBody(InputStream)
andHttpConnection.setRequestBody(InputStream, long)
. Use of the newInputStreamGenerator
is preferred because it allows for request replays. - [CHANGE] Moved HTTP and interceptor code into a separate jar.
- [NEW] Constructor for
Database
subclasses. - [IMPROVED] Documentation for
Database.findByIndex
to show complete selector. - [IMPROVED] Documentation regarding document revisions.
- [FIX]
CouchDbException: 400 Bad Request: bad_request: invalid_json
when a query parameter contains a semicolon. - [FIX]
NullPointerException
when usingDatabase.saveAttachment
with anull
revision to attach to a new document with the specified ID. - [FIX]
CouchDbException
when usingDatabase.saveAttachment
to update attachments.
- [IMPROVED] Request a session delete on client shutdown.
- [IMPROVED] Consistently encode all parts of request URLs and handle additional special characters.
- [FIX] Stopped integers in complex key arrays turning into floats when using view pagination with tokens.
- [FIX] Replaced string operations with GSON objects when parsing JSON.
- [FIX] Enabled specification of multiple drilldown parameters for search.
- [NEW]
Database.invokeUpdateHandler
now handles POST requests.
- [IMPROVED] Included error and reason information in message from
CouchDbException
classes. - [IMPROVED] Added HTTP status code to
Response
objects. - [IMPROVED] Added parameter pagination option for views. See
ViewRequest.getResponse(String)
. - [FIX] Too many bytes written exception caused by inconsistent encoding between UTF-8 and the JVM default. UTF-8 is now correctly used for the request body content length and throughout.
- [FIX] Fixed deserialization of
ReplicatorDocument
where the source or target url is a JSON object not a string. - [FIX] Renew cookies when the server returns a 403 status code with
{"error":"credentials_expired"}
. - [FIX] Cookie authentication now honours custom SSL configurations when making the
_session
request.
- [NEW]
DesignDocument.MapReduce
now has a setter for thedbcopy
field. - [NEW] Requests for the
_all_docs
endpoint are made viaDatabase#getAllDocsRequestBuilder()
instead of using a view. - [NEW] Introduced new view query API. More information is available in the javadoc,
including usage and migration examples. Note the absence of an equivalent for
queryForStream()
. If you were using thequeryForStream()
method we would be interested in feedback about your use case. For example, if you were using theInputStream
directly for streaming API parsing with an alternative JSON library we might be able to make this easier by handling the streams and providing a callback. - [NEW] Optional OkHttp dependency for per CloudantClient instance connection pooling.
- [BREAKING CHANGE] Removed
Database.batch(Object)
method. Usingbatch=ok
is not recommended. - [BREAKING CHANGE] JVM
http.maxConnections
configured pool is used by default for connection pooling. - [BREAKING CHANGE] Removed Apache HttpClient dependency. API methods that used HttpClient classes
(e.g.
executeRequest
) now useHttpConnection
instead. - [BREAKING CHANGE]
CloudantClient
public constructors andConnectionOptions
have been removed.CloudantClient
instances are now created and have options configured usingClientBuilder
. - [BREAKING CHANGE] Removed these deprecated methods:
CloudantClient.deleteDB(String, String)
useCloudantClient.deleteDb(String)
,Database.invokeUpdateHandler(String, String, String)
useDatabase.invokeUpdateHandler(String, String, Params)
,CloudantClient.setGsonBuilder(GsonBuilder)
useClientBuilder.gsonBuilder(GsonBuilder)
.
- [BREAKING CHANGE] Removed version 1.x view query API.
- [BREAKING CHANGE] LightCouch classes moved to package com.cloudant.client.org.lightcouch.
This should only have a visible impact for
CouchDbException
and its subclasses. - [BREAKING CHANGE] Removed DbDesign class and replaced with DesignDocumentManager.
If you were using the
getFromDesk
method, convert your design document directory to javascript files and useDesignDocumentManager.fromFile(File)
orDesignDocumentManager.fromDirectory(File)
. More information is available in the javadoc, including usage for de-serializing design document javascript files toDesignDocument
objects. - [FIX] Use the default port for the protocol when a client instance is created from a URL without specifying a port.
- [NEW] Added Basic Auth for HTTP proxies. Configure via
ConnectOption#setProxyUser
andConnectOptions#setProxyPassword
.
- [CHANGED] Added default of 5 minutes for both connection and socket timeouts instead of waiting forever.
- [UPGRADED] Upgraded Apache HttpClient from 4.3.3 to 4.3.6.
- [FIXED]
org.apache.http.conn.UnsupportedSchemeException: http protocol is not supported
when using a proxy server withhttp
and a server withhttps
.
- [FIXED]
NullPointerException
when parsing{doc: null}
JSON in search or view results. - [FIXED] Fixed issue with pagination numbering when using
queryPage
with a clustered DB. - [FIXED] Fixed issue where
queryPage
could not handle JSON values emitted from views. - [IMPROVED] Various documentation updates.
- [DEPRECATED]
com.cloudant.client.api.model.Page
setter methods.
- [IMPROVED] Removed unconditional GET request when creating
Database
objects. This offered little protection to the developer while performing a hidden HTTP request. - [FIXED] Fixed issue where URL parameters would be appended rather than replaced. This could cause very long URLs to be accidentally created.
- [BREAKING CHANGE] Hostname verification and certificate chain
validation are now enabled by default. To disable these additional
checks when the client connects to the database,
setSSLAuthenticationDisabled(true)
can be called on theConnectOptions
object before you pass it to theCloudantClient
constructor. - [NEW] New API for specifying the SSLSocketFactory. This can used to
enhance security in specific environments. To set this SSLSocketFactory,
call the
setAuthenticatedModeSSLSocketFactory
method on theConnectOptions
object before you pass it to theCloudantClient
constructor. - [NEW] New API for deleting databases,
CloudantClient.deleteDB(String name)
- [FIX] Fixed querying of next/previous page in a descending view.
- [FIX] Fixed handling of non-ASCII characters when the platform's default charset is not UTF-8.
- [FIX] Fixed encoding of
+
,=
and&
characters when they are used in the query part of a URL. - [IMPROVED] Changed the default number of connections per host to 6.
- [NEW] use_index option now available for
FindByIndex
. - [IMPROVED] Use Cloudant API V2 for permissions.
- [NEW] Added user-agent header to requests.
- [Deprecated] Deprecated
CloudantClient.deleteDB(String name, String confirm)
API.
- [FIX] Fixed Issue #27: selector API takes JSON fragment only?
- [FIX] Fixed Issue #28: client constructor: clarify user vs api.
- [FIX] Fixed Issue #30: The maven jar is compiled to run on only Java 7 and up.
- [FIX] Fixed Issue #31: Timestamp JSON string to Java Timestamp Value - View.query(class).
- First official release.
- [NEW] Includes support for connecting to Cloudant Local.
- Initial release (beta).