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!
> >>>>>
> >>>>>
> >>>>
> >>>
> >
>

Reply via email to