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.gr...@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/org/basex/examples/api/BaseXClient.java > > > On Thu, Jan 28, 2016 at 4:57 PM, E. Wray Johnson <wray.john...@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.gr...@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.gr...@gmail.com> > >> > wrote: > >> >> > >> >> See here: http://docs.basex.org/wiki/Serialization > >> >> > >> >> Am 28.01.2016 7:13 vorm. schrieb "E. Wray Johnson" > >> >> <wray.john...@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.engle...@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.john...@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.gr...@gmail.com> > > wrote: > >> > >> See here: http://docs.basex.org/wiki/Serialization > >> > >> Am 28.01.2016 7:13 vorm. schrieb "E. Wray Johnson" > >> <wray.john...@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.engle...@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.john...@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! > >>>>> > >>>>> > >>>> > >>> > > >