I am not able to add more than one request to a batch ChangeSet as the BatchManager has PipedOutputStream Writer that's causing thread to get into infinite loop.
Check the below sample code in which I'm trying to add requests.
ODataBatchRequest batchRequest = client.getBatchRequestFactory().getBatchRequest("serviceRootURI");
BatchManager payloadManager = batchRequest.payloadManager();
ODataChangeset changeset = payloadManager.addChangeset();
ODataEntityCreateRequest<ClientEntity> createRequest = client.getCUDRequestFactory()
.getEntityCreateRequest(new URI("serviceRoot"), clientEntity);
changeset.addRequest(createRequest); // here the thread waits in infinite loop due to piped streams sync problem.
The problem is observed in line "request.batch(req, String.valueOf(contentId));" in addRequest() method of ODataChangesetImpl class.
It seems a known issue in Java - http://stackoverflow.com/questions/9171632/piped-input-stream-is-getting-locked