Comments (5)
Sravan noted the problem goes away if he comments out his JSON document. I wonder if it could be a Jackson interaction. Below is my working example of a heterogeneous batch that uses StringHandle for JSON instead of JacksonHandle, and it works fine.
static void example4() {
// Synthesize input content
StringHandle jsonContent = new StringHandle(
"{\"key\": \"value\"}").withFormat(Format.JSON);
StringHandle xmlContent = new StringHandle(
"<data>some xml content</data>").withFormat(Format.XML);
String filename = new String("C:/Users/kcoleman/Downloads/nelf.jpg");
FileHandle binaryContent =
new FileHandle().with(new File(filename)).withMimetype("image/jpeg");
// Create and build up the batch
GenericDocumentManager gdm = client.newDocumentManager();
DocumentWriteSet batch = gdm.newWriteSet();
batch.add("doc1.json", jsonContent);
batch.add("doc2.xml", xmlContent);
batch.add("doc3.jpg", binaryContent);
gdm.write(batch);
// Verify results
System.out.println("doc1.json exists as: " + gdm.exists("doc1.json").getFormat().toString());
System.out.println("doc2.xml exists as: " + gdm.exists("doc2.xml").getFormat().toString());
System.out.println("doc3.jpg exists as: " + gdm.exists("doc3.jpg").getFormat().toString());
}
from java-client-api.
I get the same error if I do a single document write with DocumentMetadataHandle + JacksonHandle. That's also a multipart write under the covers. Write of JacksonHandle alone succeeds as does write of DocumentMetadataHandle + StringHandle.
from java-client-api.
Turning off resendability in the JacksonHandle (to force digest authentication before the write) and turning on HttpClient logging shows what's going on.
When StringHandle is used, the terminating boundary for the multipart is sent:
[DEBUG] wire - >> "--Boundary_1_1277304478_1403790142585[\r][\n]"
[DEBUG] wire - >> "Content-Type: application/json[\r][\n]"
[DEBUG] wire - >> "[\r][\n]"
[DEBUG] wire - >> "[\r][\n]"
[DEBUG] wire - >> "5f[\r][\n]"
[DEBUG] wire - >> "{"object":{"key":"value"},"array":["item1","item2"]}[\r][\n]"
[DEBUG] wire - >> "--Boundary_1_1277304478_1403790142585--[\r][\n]"
[DEBUG] wire - >> "[\r][\n]"
[DEBUG] wire - >> "0[\r][\n]"
[DEBUG] wire - >> "[\r][\n]"
[DEBUG] wire - << "HTTP/1.1 204 Content Updated[\r][\n]"
When JacksonHandle is used, the terminating boundary is written after HttpClient has already closed the stream, triggering the error:
[DEBUG] wire - >> "--Boundary_1_1409826334_1403790513065[\r][\n]"
[DEBUG] wire - >> "Content-Type: application/json[\r][\n]"
[DEBUG] wire - >> "[\r][\n]"
[DEBUG] wire - >> "[\r][\n]"
[DEBUG] wire - >> "34[\r][\n]"
[DEBUG] wire - >> "{"object":{"key":"value"},"array":["item1","item2"]}"
[DEBUG] wire - >> "[\r][\n]"
[DEBUG] wire - >> "0[\r][\n]"
[DEBUG] wire - >> "[\r][\n]"
[DEBUG] DefaultClientConnection - Connection closed
[DEBUG] DefaultHttpClient - Closing the connection.
[DEBUG] DefaultClientConnection - Connection closed
[INFO] DefaultHttpClient - I/O exception (java.io.IOException) caught when processing request: Stream closed
from java-client-api.
Fixed on branch dev, as part of the pojoFacade branch/commit. I configured JacksonBaseHandle to set to false both JsonGenerator.Feature.AUTO_CLOSE_TARGET and JsonParser.Feature.AUTO_CLOSE_SOURCE.
from java-client-api.
Verified in the dev branch.
from java-client-api.
Related Issues (20)
- DMSDK has troubles with tiered storage offline HOT 8
- Transfer Encoding has non-emtpy body when no result in returned through okhttp HOT 3
- op.sampleBy misses the 0 parameter overloaded method HOT 1
- Delete temporal documents via DMSDK HOT 2
- Specifi page length and startIndex for dataMOvementManager using newQueryBatcher HOT 3
- Upgrade to jackson-databind 2.14.0 when available HOT 2
- WriteBatcher does not write documents when total documents provided is less than 100 and without using withBatchSize HOT 1
- SparQL query throws unexpected error HOT 3
- Executing PatchHandle against non-existing Document does not throw an Exception HOT 5
- Incorrectly return empty query result HOT 3
- Support for Java 17? HOT 8
- Numbers returned by MarkLogic do not use scientific notation HOT 1
- Implementations of innerSerialize lack proper namespace HOT 11
- Feature Request: OptimisticLockingExecption HOT 7
- Request for Jakarta EE 10 compliant version HOT 18
- Remove "ML-Check-ML11-Headers" for ML11 java client api HOT 1
- Directory queries allow for invalid values of "depth" without throwing an error HOT 3
- Wrong timeout conversion in awaitCompletion HOT 4
- search:and-not-query is ignored in QueryBatcher HOT 6
- queryManager.uris does not honor additional-query in search options HOT 6
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from java-client-api.