Both problems fixed.  Here is how:

On Fri, Dec 11, 2015 at 2:05 PM, E. Wray Johnson <wray.johnson@gmail.com> wrote:
Steps:
  1. Create or choose a database (e.g. named 'db')
  2. Store in BaseX a raw zip file (e.g. 'alpha/bravo/charlie/delta.zip').  My zip file has files in folders.
  3. Choose a target name that also has a ".zip" extension to similar to 'include name of archive in path' behavior.  Note, it should not be the same as the raw zip file stored (e.g. 'delta.zip')
  4. Run the following in the BaseX GUI client - it will work
  5. Repeat 1 and 2 using the BaseX Java Client example - it does not work

GUI CLIENT - DOES WORK
========================================
let $database := 'db'
let $extractTo := 'target.zip'
let $archivePath := 'alpha/bravo/charlie/delta.zip'

let $archive  := db:retrieve($database, $archivePath)
let $basePath := replace($archivePath, '[^/]+$', '') || $extractTo
let $entries  := archive:entries($archive)
let $contents := archive:extract-binary($archive)
return for-each-pair($entries, $contents, %updating function($entry, $content) {  
  let $target := $basePath || '/' || $entry/text()
  return try {
      db:store($database, $target, $content)
    } catch * {
      ()     
    }
})


JAVA - DOES NOT WORK:
===============================================
// Usage: Create a BaseXClient object and call this method.
// For example:
// ExplodeArchive("db", "target.zip", "alpha/bravo/charlie/delta.zip", ..)

private static void ExplodeArchive(final String database, String extractTo, String archivePath, BaseXClient session) throws IOException {
        try {
            String queryString =
                    "let $database := '" + database +"' " +
                    "let $extractTo := '" + extractTo + "' " +
                    "let $archivePath := '"+ archivePath + "' " +
                    "let $archive  := db:retrieve($database, $archivePath) " +
                    "let $basePath := replace($archivePath, '[^/]+$', '') || $extractTo " +
                    "let $entries  := archive:entries($archive) " +
                    "let $contents := archive:extract-binary($archive) " +
                    "for $entry at $pos in $entries " +
                    "let $content := $contents[$pos] " +
                    "let $target := $basePath || '/' || $entry/text() " +
                    "return db:store($database, "+ "$target, $content)";
            final BaseXClient.Query query = session.query(queryString);
            query.execute();
        } finally {
            session.close();
        }
    }




On Fri, Dec 11, 2015 at 1:28 PM, Christian Grün <christian.gruen@gmail.com> wrote:
Could you please provide me with a minimized example that shows the
problem, and which I can run both in the GUI and via the Java client?


On Fri, Dec 11, 2015 at 6:24 PM, E. Wray Johnson <wray.johnson@gmail.com> wrote:
> What is the format for an absolute path for db:store?
> Neither of the following works:
>
> '/db/alpha/bravo/charlie/delta.zip/subfolder/subfile.ext'
> and '/'alpha/bravo/charlie/delta.zip/subfolder/subfile.ext'
>
> However my original code works in the BaseX GUI, just not through the Java
> Client.
>
> Could it have something to the with the period or .zip in the middle of the
> path?
>
>
>
> On Fri, Dec 11, 2015 at 11:11 AM, Christian Grün <christian.gruen@gmail.com>
> wrote:
>>
>> > This is happening in the call to db:store where the path is
>> > 'alpha/bravo/charlie/delta.zip/subfolder/subfile.ext'
>>
>> Hm, so this is the relative path to the local resource you want to
>> store? Does it work if you specify the absolute path?
>>
>> > Could it have something to do with a default archive parser for archives
>> > in
>> > the Java Client ?
>>
>> The Java client (if it’s the one I believe it is) is very dumb; it
>> just passes on everything to the server.
>>
>>
>> >
>> >
>> >
>> > On Fri, Dec 11, 2015 at 10:10 AM, Christian Grün
>> > <christian.gruen@gmail.com>
>> > wrote:
>> >>
>> >> > In the meantime can you shed some light into the >  [FODC0002]
>> >> > Resource
>> >> > 'delta.zip' does not exist.' error?
>> >>
>> >> (cc to the list): It simply says that a database resource does not
>> >> exist.
>> >>
>> >> Maybe you have more than one BaseX database directory in your
>> >> environment? Could you try db:list('...db...') and check what results
>> >> are returned in the GUI and via the client?
>> >>
>> >>
>> >> > On Fri, Dec 11, 2015 at 9:53 AM, Christian Grün
>> >> > <christian.gruen@gmail.com>
>> >> > wrote:
>> >> >>
>> >> >> > The raw stored file was slightly larger than the original zip.
>> >> >>
>> >> >> Do you have an example for that?
>> >> >>
>> >> >> > But when I submit the exact same query using the Java client I get
>> >> >> > the
>> >> >> > following error:
>> >> >> >
>> >> >> > Stopped at ., 1/216:
>> >> >> >  [FODC0002] Resource 'delta.zip' does not exist.
>> >> >>
>> >> >> It shouldn’t make a difference. I’ll probably need more info to
>> >> >> track
>> >> >> this
>> >> >> down.
>> >> >
>> >> >
>> >
>> >
>
>