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

Reply via email to