You can specify arbitrary file system paths as argument:
• If you prefix your actual path with db:option('WEBPATH'), you should
end up in the directory that’s relevant for you.
• file:base-dir() points to the directory of your XQuery module
• file:current-dir() points to the directory from which BaseX or your
web server was started.
On Mon, May 13, 2019 at 6:01 PM France Baril
<france.baril@architextus.com> wrote:
>
> It looks for content in the home directory, not in webapp/static.
>
> Le lun. 13 mai 2019 12 h 04, Christian Grün <christian.gruen@gmail.com> a écrit :
>>
>> > My 1st thought was the file module, but it doesn't seem to have access to that directory.
>>
>> Sounds surprising. Which error message do you get?
>>
>>
>> >> Hi France,
>> >>
>> >> Thanks for the test case. I called your RESTXQ function with Windows,
>> >> and it seems to work. What I did:
>> >>
>> >> * I started basexhttp.bat
>> >> * I modified your script to be runnable (8972 → 8984, namespace added
>> >> for "a-test", etc.)
>> >> * I added a test.png to the "static" webapp directory
>> >> * I called http://localhost/a-test (in the browser and via curl), it
>> >> returns <div>200</div>
>> >>
>> >> Maybe you did something differently?
>> >>
>> >> Does the problem persist if you…
>> >>
>> >> * send the HTTP request without xquery:fork-join?
>> >> * use fetch:binary?
>> >>
>> >> The easier your example code and setup is, the easier it might get to
>> >> reproduce the problem.
>> >>
>> >> And a general observation: It’s recommendable not to the same HTTP
>> >> instance from a RESTXQ function (but this may simply have been the
>> >> result of our persistance to deliver us with reproducible test
>> >> cases?).
>> >>
>> >> Cheers
>> >> Christian
>> >>
>> >>
>> >> On Wed, May 8, 2019 at 11:54 AM France Baril
>> >> <france.baril@architextus.com> wrote:
>> >> >
>> >> > Hi,
>> >> >
>> >> > We have two servers with similar jetty configuration, we find that an http:request call on static works on Linux but not on Windows.
>> >> >
>> >> > HOW TO REPLICATE
>> >> >
>> >> > Add an image test.png in webapp/static
>> >> > Try the attached .xqm (change img-url for your server path)
>> >> > Copy of the .xqm function for reference:
>> >> >
>> >> >> declare %rest:path('/a-test')
>> >> >> %rest:GET
>> >> >> %output:method("html")
>> >> >> %output:html-version("5.0")
>> >> >> function a-test:http-req(){
>> >> >> let $img-url := 'http://localhost:8972/static/test.png'
>> >> >> let $http-function := function() {http:send-request(<http:request method='get' status-only='true'/>, $img-url)}
>> >> >> let $http-s := xquery:fork-join($http-function)
>> >> >> let $http-status := $http-s//data(@status)
>> >> >> return <div>{$http-status}</div>
>> >> >> };
>> >> >
>> >> >
>> >> > Test: http://localhost:8972/a-test
>> >> >
>> >> > Result on Linux: 200
>> >> > Result on Windows: [experr:HC0001] unknown protocol: localhost
>> >> >
>> >> > This seemed to be security issue, but tests in multiple browsers return the same results and enabling CORS doesn't help... technically we're calling from the same domain/port... but hey we tried!
>> >> >
>> >> > If we type the value of $img-url directly in the browser, we see the image on both platforms, so the issue is not with accessing the image itself, but with accessing it with the http:send-request function.
>> >
>> >
>> >
>> > --
>> > France Baril
>> > Architecte documentaire / Documentation architect
>> > france.baril@architextus.com