Yes the code I modified is indeed [1] java/org/basex/examples/api/BaseXClient.java https://github.com/BaseXdb/basex/blob/master/basex-examples/src/main/java/org/basex/examples/api/BaseXClient.java
The following line was needed to handle the first byte of the query result. if (in.read() > 0)
I do like your "client.execute("xquery db:retrieve" suggestion better as it does not require me to change the example client code.
However, what I really need is a way to do db:store and db:replace via Xquery with an InputStream (e.g. without requiring the open/close commands).
On Fri, Jan 29, 2016 at 4:50 AM, Christian Grün christian.gruen@gmail.com wrote:
Please be more specific: Could you give me the exact reference to the class you have extended?
If it’s [1], the following might work:
public void execute(final OutputStream output) throws IOException { out.write(4); send(id); receive(in, output); if(!ok()) throw new IOException(receive()); }
Did you try to use the BaseXClient.execute method as well?
BaseXClient client = new BaseXClient("localhost", 1984, "admin",
"admin"); try { ByteArrayOutputStream os = new ByteArrayOutputStream(); client.execute("xquery db:retrieve('db', 'file.bin)", os); final byte[] data = os.toByteArray(); System.out.println("Size of binary data: " + data.length); } finally { client.close(); }
[1] https://github.com/BaseXdb/basex/blob/master/basex-examples/src/main/java/or...
On Thu, Jan 28, 2016 at 4:57 PM, E. Wray Johnson wray.johnson@gmail.com wrote:
So the problem was my fault as I suspected. And I fixed it and I am now getting the correct data. I was attempting to retrieve a binary/raw document using a Java client without the open/close which locks a
database
by switching from using a retrieve command to db:retrieve XQuery. I
added
the following method to the client Query object. It works fine, but let
me
know if you see anything wrong with it. I particular, is the if(!ok()) needed? I suggest this as an enhancement. Also, is it possible to
achieve,
by enhancement, similar results using db:store in an XQuery from Java
client
and an InputStream?
public void execute(final OutputStream output) throws IOException { out.write(4); send(id); if (in.read() > 0) { receive(in, output); } info = receive(); if (!ok()) { throw new IOException(info); } }
On Thu, Jan 28, 2016 at 10:01 AM, Christian Grün <
christian.gruen@gmail.com>
wrote:
I am getting the incorrect data downloaded as Mike Engledew said he
used
the "raw" output method to fix. However, "raw" is not listed as one of
the
valid types for this option. So how should I ensure binary files get downloaded. accurately?
Any SSCCE?
On Thu, Jan 28, 2016 at 3:08 AM, Christian Grün christian.gruen@gmail.com wrote:
See here: http://docs.basex.org/wiki/Serialization
Am 28.01.2016 7:13 vorm. schrieb "E. Wray Johnson" wray.johnson@gmail.com:
With 8.4...
declare option output:method "raw";
I get
[SEPM0016] Value of 'method' must be one of (xml,xhtml,html,json,csv,text,adaptive,basex).
On Sat, Jan 16, 2016 at 2:06 PM, Mike Engledew mike.engledew@gmail.com wrote: > > If like me your using BaseX 8.3.1 don't forget to add ... > > declare option output:method "raw"; > > before the db:retrieve() otherwise you won't get back what you put > in. > I learned this the hard way trying to extract binary files that
were
> stored in codepage IBM1047 and it took me a while to figure out why > they > came back translated; > > > On Fri, Jan 15, 2016 at 11:11 AM, E. Wray Johnson > wray.johnson@gmail.com wrote: >> >> When using the sample Java client to store/retrieve binary/raw
files
>> I >> have to execute separate open/close commands. It is my >> understanding that >> this locks the database. In a multi-user scenario, such locking
is
>> undesirable as binary/raw files can be quite large. And since
there
>> is no >> alteration of the indexes etc during such operations, is there a >> better way? >> Also, why isn't there a corresponding retrieve method on the Java >> client, >> similar to the store method? >> >> My code to store: >> BaseXClient session = new BaseXClient(host, port, username, >> password); >> session.execute("open " + database); >> session.store(path, inputStream); >> session.execute("close"); >> >> My code to retrieve: >> BaseXClient session = new BaseXClient(host, port, username, >> password); >> session.execute("open " + database); >> session.execute("retrieve " + path, outputStream); >> session.execute("close"); >> >> Thanks in advance! >> >> >
On Thu, Jan 28, 2016 at 3:08 AM, Christian Grün <
christian.gruen@gmail.com>
wrote:
See here: http://docs.basex.org/wiki/Serialization
Am 28.01.2016 7:13 vorm. schrieb "E. Wray Johnson" wray.johnson@gmail.com:
With 8.4...
declare option output:method "raw";
I get
[SEPM0016] Value of 'method' must be one of (xml,xhtml,html,json,csv,text,adaptive,basex).
On Sat, Jan 16, 2016 at 2:06 PM, Mike Engledew <
mike.engledew@gmail.com>
wrote:
If like me your using BaseX 8.3.1 don't forget to add ...
declare option output:method "raw";
before the db:retrieve() otherwise you won't get back what you put
in.
I learned this the hard way trying to extract binary files that were stored in codepage IBM1047 and it took me a while to figure out why
they
came back translated;
On Fri, Jan 15, 2016 at 11:11 AM, E. Wray Johnson wray.johnson@gmail.com wrote:
When using the sample Java client to store/retrieve binary/raw files
I
have to execute separate open/close commands. It is my
understanding that
this locks the database. In a multi-user scenario, such locking is undesirable as binary/raw files can be quite large. And since there
is no
alteration of the indexes etc during such operations, is there a
better way?
Also, why isn't there a corresponding retrieve method on the Java
client,
similar to the store method?
My code to store: BaseXClient session = new BaseXClient(host, port, username,
password);
session.execute("open " + database); session.store(path, inputStream); session.execute("close");
My code to retrieve: BaseXClient session = new BaseXClient(host, port, username,
password);
session.execute("open " + database); session.execute("retrieve " + path, outputStream); session.execute("close");
Thanks in advance!