> 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).
That will be difficult, because data to be inserted may occur anywhere inside an XQuery expression.. > > > 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! >> >>>>> >> >>>>> >> >>>> >> >>> >> > > >