Done. I'll wait to hear from other folks before pulling a trigger on 
(re)publishing the site.

---
A. Soroka
The University of Virginia Library

> On Nov 9, 2016, at 6:30 AM, Andy Seaborne <[email protected]> wrote:
> 
> Great -
> 
> One (!) other thing:
> 
> A section specifically calling out migrating SPARQL remote calls: 
> QueryExecutionFactory.sparqlService and QueryEngineHTTP.
> 
> On the latter, older code may still be directly using 
> QueryEngineHTTP.setBasicAuthentication
> 
>       Andy
> 
> On 08/11/16 17:58, A. Soroka wrote:
>> I've made those changes-- should be restaging now.
>> 
>> ---
>> A. Soroka
>> The University of Virginia Library
>> 
>>> On Nov 8, 2016, at 12:40 PM, Andy Seaborne <[email protected]> wrote:
>>> 
>>> 
>>> 
>>> On 08/11/16 16:59, A. Soroka wrote:
>>>> This commit includes the new docs for HTTP behavior in Jena 3.1.1. I can't 
>>>> find any way to see a view of this on the staging site-- 
>>>> https://jena.staging.apache.org/ just seems to proxy 
>>>> https://cms.apache.org/, for some reason?
>>>> 
>>> 
>>> It does not for me.
>>> 
>>> Try http://jena.staging.apache.org/  (not https)
>>> 
>>> PDF attached, cc'ed to you in the hope it get through.
>>> 
>>> Comments:
>>> 
>>> 1/ I'd put the current (3.1.1) text first and the previous second so the 
>>> current is more visible.
>>> 
>>> Links at the end of the intro to "current" and "previous", or in the intro 
>>> as this difference is mentioned.
>>> 
>>> 2/ Title tweaking:
>>> 
>>> "HTTP Authentication after Jena 3.1.0" ->
>>> "HTTP Authentication from Jena 3.1.1"
>>> 
>>> "HTTP Authentication before Jena 3.1.0" =>
>>> "HTTP Authentication from Jena 3.0.0 to 3.1.0"
>>> 
>>> (so the range includes 3.1.0 !)
>>> 
>>> Mentioning Jena 2.x is not necessary IMO - the additional detail adds 
>>> confusion for current users and 3.x upgrading users (the majority).
>>> 
>>> 3/
>>> "Simple authentication using username and password"
>>> 
>>> "Authenticating via a form"
>>> 
>>> The <h5> don't show up as different on teh screen for me so maybe bump <h4> 
>>> "Examples of authentication" up a level to <h3> and move sub <5> to <h4> .
>>> 
>>> Maybe drop <h3> "Applying Authentication" (section title immediately after 
>>> a section title) and have the paragraph there straight away.
>>> 
>>>   Andy
>>> 
>>>> ---
>>>> A. Soroka
>>>> The University of Virginia Library
>>>> 
>>>>> On Nov 8, 2016, at 11:53 AM, [email protected] wrote:
>>>>> 
>>>>> Author: ajs6f
>>>>> Date: Tue Nov  8 16:53:48 2016
>>>>> New Revision: 1768736
>>>>> 
>>>>> URL: http://svn.apache.org/viewvc?rev=1768736&view=rev
>>>>> Log:
>>>>> Updates for HTTP behavior in Jena 3.1.1
>>>>> 
>>>>> Modified:
>>>>>  jena/site/trunk/content/documentation/query/http-auth.mdtext
>>>>>  jena/site/trunk/content/documentation/query/service.mdtext
>>>>> 
>>>>> Modified: jena/site/trunk/content/documentation/query/http-auth.mdtext
>>>>> URL: 
>>>>> http://svn.apache.org/viewvc/jena/site/trunk/content/documentation/query/http-auth.mdtext?rev=1768736&r1=1768735&r2=1768736&view=diff
>>>>> ==============================================================================
>>>>> --- jena/site/trunk/content/documentation/query/http-auth.mdtext 
>>>>> (original)
>>>>> +++ jena/site/trunk/content/documentation/query/http-auth.mdtext Tue Nov  
>>>>> 8 16:53:48 2016
>>>>> @@ -16,10 +16,12 @@ Notice:    Licensed to the Apache Softwa
>>>>>          specific language governing permissions and limitations
>>>>>          under the License.
>>>>> 
>>>>> -As of ARQ 2.11.0 there is a new unified HTTP operation framework that 
>>>>> provides a uniform mechanism for
>>>>> -HTTP authentication that also allows ARQ to support a broader range of 
>>>>> authentication mechanisms than were previously possible.
>>>>> +From ARQ 2.11.0 through ARQ 3.1.0 there is a Jena-specific unified HTTP 
>>>>> operation framework that provides a uniform mechanism for
>>>>> +HTTP authentication that also allows ARQ to support a broader range of 
>>>>> authentication mechanisms than were previously possible. After ARQ 3.1.0, 
>>>>> Jena exposes the underlying HTTP Commons functionality to the same end. 
>>>>> This documentation is therefore devided into two sections. The first 
>>>>> explains the older Jena-specific functionality, and the second explains 
>>>>> how to use HTTP Commons code to the same ends.
>>>>> 
>>>>> -## Applying Authentication
>>>>> +## HTTP Authentication before ARQ 3.1.0
>>>>> +
>>>>> +### Applying Authentication
>>>>> 
>>>>> APIs that support authentication typically provide two methods for 
>>>>> providing authenticators, a `setAuthentication(String username, char[] 
>>>>> password)` method
>>>>> which merely configures a `SimpleAuthenticator`.  There will also be a 
>>>>> `setAuthenticator(HttpAuthenticator authenticator)` method
>>>>> @@ -41,14 +43,14 @@ avoids the needs to cast and manually se
>>>>>       ...
>>>>>   }
>>>>> 
>>>>> -### Authenticators
>>>>> +#### Authenticators
>>>>> 
>>>>> Authentication mechanisms are provided by [HttpAuthenticator][1] 
>>>>> implementations of which a number are provided built into ARQ.
>>>>> 
>>>>> This API provides the authenticator with access to the `HttpClient`, 
>>>>> `HttpContext` and target `URI` of the request that is about to be carried
>>>>> out.  This allows for authenticators to add credentials to requests on a 
>>>>> per-request basis and/or to use different mechanisms and credentials for 
>>>>> different services.
>>>>> 
>>>>> -#### SimpleAuthenticator
>>>>> +##### SimpleAuthenticator
>>>>> 
>>>>> The [simple authenticator][2] is as the name suggests the simplest 
>>>>> implementation.  It takes a single set of credentials which is applied to
>>>>> any service.
>>>>> @@ -56,7 +58,7 @@ any service.
>>>>> Authentication however is not preemptive so unless the remote service 
>>>>> sends a HTTP challenge (401 Unauthorized or 407 Proxy Authorization
>>>>> Required) then credentials will not actually be submitted.
>>>>> 
>>>>> -#### ScopedAuthenticator
>>>>> +##### ScopedAuthenticator
>>>>> 
>>>>> The [scoped authenticator][3] is an authenticator which maps credentials 
>>>>> to different service URIs.  This allows you to specify different
>>>>> credentials for different services as appropriate.  Similarly to the 
>>>>> simple authenticator this is not preemptive authentication so credentials 
>>>>> are
>>>>> @@ -67,13 +69,13 @@ if you define credentialsfor `http://exa
>>>>> e.g. `http://example.org/some/path`.  However if you had also defined 
>>>>> credentials for `http://example.org/some/path` then these would be
>>>>> used in favor of those for `http://example.org`
>>>>> 
>>>>> -#### ServiceAuthenticator
>>>>> +##### ServiceAuthenticator
>>>>> 
>>>>> The [service authenticator][4] is an authenticator which uses information 
>>>>> encoded in the ARQ context and basically provides access to the
>>>>> existing credential provision mechanisms provided for the `SERVICE` 
>>>>> clause, see [Basic Federated Query][5] for more information on
>>>>> configuration for this.
>>>>> 
>>>>> -#### FormsAuthenticator
>>>>> +##### FormsAuthenticator
>>>>> 
>>>>> The [forms authenticator][6] is an authenticator usable with services 
>>>>> that require form based logins and use session cookies to verify login 
>>>>> state.
>>>>> This is intended for use with services that don't support HTTP's built-in 
>>>>> authentication mechanisms for whatever reason.  One example of this
>>>>> @@ -104,7 +106,7 @@ that maps each service to an associated
>>>>> 
>>>>> Currently forms based login that require more than just a username and 
>>>>> password are not supported.
>>>>> 
>>>>> -#### PreemptiveBasicAuthenticator
>>>>> +##### PreemptiveBasicAuthenticator
>>>>> 
>>>>> This [authenticator][8] is a decorator over another authenticator that 
>>>>> enables preemptive basic authentication, this **only** works for servers
>>>>> that support basic authentication and so will cause authentication 
>>>>> failures when any other authentication scheme is required.  You should 
>>>>> **only**
>>>>> @@ -121,20 +123,12 @@ Also be aware that basic authentication
>>>>> many servers will use more secure schemes like Digest authentication 
>>>>> which **cannot** be done preemptively as they require more complex
>>>>> challenge response sequences.
>>>>> 
>>>>> -#### DelegatingAuthenticator
>>>>> +##### DelegatingAuthenticator
>>>>> 
>>>>> The [delegating authenticator][12] allows for mapping different 
>>>>> authenticators to different services, this is useful when you need to mix 
>>>>> and
>>>>> match the types of authentication needed.
>>>>> 
>>>>> -### Debugging Authentication
>>>>> -
>>>>> -ARQ uses [Apache Http Client][14] for all its HTTP operations and this 
>>>>> provides detailed logging information that can be used for debugging.  To
>>>>> -see this information you need to configure your logging framework to set 
>>>>> the `org.apache.http` package to either `DEBUG` or `TRACE` level.
>>>>> -
>>>>> -The `DEBUG` level will give you general diagnostic information about 
>>>>> requests and responses while the `TRACE` level will give you detailed
>>>>> -HTTP traces i.e. allow you to see the exact HTTP requests and responses 
>>>>> which can be extremely useful for debugging authentication problems.
>>>>> -
>>>>> -### The Default Authenticator
>>>>> +#### The Default Authenticator
>>>>> 
>>>>> Since it may not always be possible/practical to configure authenticators 
>>>>> on a per-request basis the API includes a means to specify a default
>>>>> authenticator that is used when no authenticator is explicitly specified. 
>>>>>  This may be configured via the
>>>>> @@ -148,6 +142,82 @@ provided that it is using ARQs APIs to m
>>>>> 
>>>>> Note that the default authenticator may be disabled by setting it to 
>>>>> `null`.
>>>>> 
>>>>> +## HTTP Authentication after ARQ 3.1.0
>>>>> +
>>>>> +### Applying Authentication
>>>>> +
>>>>> +APIs that support authentication typically provide methods for providing 
>>>>> an [HttpClient] for use with the given instance of that API class. 
>>>>> `HttpClient` is [extremely flexible][16] and can handle most scenarios 
>>>>> very well. Since it may not always be possible/practical to configure 
>>>>> authenticators on a per-request basis the API includes a means to specify 
>>>>> a default client that is used when no other client is explicitly 
>>>>> specified.  This may be configured via the
>>>>> +`setDefaultHttpClient(HttpClient httpClient)` method of the [HttpOp][13] 
>>>>> class. This allows for static-scoped configuration of HTTP behavior.
>>>>> +
>>>>> +#### Examples of authentication
>>>>> +
>>>>> +This section includes a series of examples showing how to use HTTP 
>>>>> Commons classes to perform authenticated work. Most of them take 
>>>>> advantage of `HttpOp.setDefaultHttpClient` as described above.
>>>>> +
>>>>> +##### Simple authentication using username and password
>>>>> +
>>>>> +First we build an authenticating client:
>>>>> +
>>>>> +    CredentialsProvider credsProvider = new BasicCredentialsProvider();
>>>>> +    Credentials credentials = new UsernamePasswordCredentials("user", 
>>>>> "passwd");
>>>>> +    credsProvider.setCredentials(AuthScope.ANY, credentials);
>>>>> +    HttpClient httpclient = HttpClients.custom()
>>>>> +        .setDefaultCredentialsProvider(credsProvider)
>>>>> +        .build();
>>>>> +    HttpOp.setDefaultHttpClient(httpclient);
>>>>> +
>>>>> +Notice that we gave no scope for use with the credentials 
>>>>> (`AuthScope.ANY`). We can make further use of that parameter if we want 
>>>>> to assign a scope for some credentials:
>>>>> +
>>>>> +    CredentialsProvider credsProvider = new BasicCredentialsProvider();
>>>>> +    Credentials unscopedCredentials = new 
>>>>> UsernamePasswordCredentials("user", "passwd");
>>>>> +    credsProvider.setCredentials(AuthScope.ANY, unscopedCredentials);
>>>>> +    Credentials scopedCredentials = new 
>>>>> UsernamePasswordCredentials("user", "passwd");
>>>>> +    final String host = "http://example.com/sparql";;
>>>>> +    final int port = 80;
>>>>> +    final String realm = "aRealm";
>>>>> +    final String schemeName = "DIGEST";
>>>>> +    AuthScope authscope = new AuthScope(host, port, realm, schemeName);
>>>>> +    credsProvider.setCredentials(authscope, scopedCredentials);
>>>>> +    HttpClient httpclient = HttpClients.custom()
>>>>> +        .setDefaultCredentialsProvider(credsProvider)
>>>>> +        .build();
>>>>> +    HttpOp.setDefaultHttpClient(httpclient);
>>>>> + 
>>>>> +##### Authenticating via a form
>>>>> +
>>>>> +For this case we introduce an [HttpClientContext][17], which we can use 
>>>>> to retrieve the cookie we get from logging into a form. We then use the 
>>>>> cookie to authenticate elsewhere.
>>>>> +
>>>>> +    // we'll use this context to maintain our HTTP "conversation"
>>>>> +    HttpClientContext httpContext = new HttpClientContext();
>>>>> +
>>>>> +    // first we use a method on HttpOp to log in and get our cookie
>>>>> +    Params params = new Params();
>>>>> +    params.addParam("username", "Bob Wu");
>>>>> +    params.addParam("password", "my password");
>>>>> +    HttpOp.execHttpPostForm("http://example.com/loginform";, params , 
>>>>> null, null, null, httpContext);
>>>>> +
>>>>> +    // now our cookie is stored in httpContext
>>>>> +    CookieStore cookieStore = httpContext.getCookieStore();
>>>>> +
>>>>> +    // lastly we build a client that uses that cookie
>>>>> +    HttpClient httpclient = HttpClients.custom()
>>>>> +     .setDefaultCookieStore(cookieStore)
>>>>> +         .build();
>>>>> +    HttpOp.setDefaultHttpClient(httpclient);
>>>>> +
>>>>> +## Other concerns
>>>>> +
>>>>> +### Debugging Authentication
>>>>> +
>>>>> +ARQ uses [Apache Http Client][14] for all its HTTP operations and this 
>>>>> provides detailed logging information that can be used for debugging.  To
>>>>> +see this information you need to configure your logging framework to set 
>>>>> the `org.apache.http` package to either `DEBUG` or `TRACE` level.
>>>>> +
>>>>> +The `DEBUG` level will give you general diagnostic information about 
>>>>> requests and responses while the `TRACE` level will give you detailed
>>>>> +HTTP traces i.e. allow you to see the exact HTTP requests and responses 
>>>>> which can be extremely useful for debugging authentication problems.
>>>>> +
>>>>> +### Authenticating to a SPARQL federated service
>>>>> +
>>>>> +ARQ allows the user to configure HTTP behavior to use on a per-`SERVICE` 
>>>>> basis, including authentication behavior such as is described above. This 
>>>>> works via the ARQ context. See [Basic Federated Query][5] for more 
>>>>> information on configuring this functionality.
>>>>> +
>>>>> [1]: 
>>>>> http://jena.apache.org/documentation/javadoc/arq/org/apache/jena/atlas/web/auth/HttpAuthenticator.html
>>>>> [2]: 
>>>>> http://jena.apache.org/documentation/javadoc/arq/org/apache/jena/atlas/web/auth/SimpleAuthenticator.html
>>>>> [3]: 
>>>>> http://jena.apache.org/documentation/javadoc/arq/org/apache/jena/atlas/web/auth/ScopedAuthenticator.html
>>>>> @@ -161,4 +231,7 @@ Note that the default authenticator may
>>>>> [11]: 
>>>>> http://jena.apache.org/documentation/javadoc/arq/org/apache/jena/web/DatasetGraphAccessorHTTP.html
>>>>> [12]: 
>>>>> http://jena.apache.org/documentation/javadoc/arq/org/apache/jena/atlas/web/auth/DelegatingAuthenticator.html
>>>>> [13]: 
>>>>> http://jena.apache.org/documentation/javadoc/arq/org/apache/jena/riot/web/HttpOp.html
>>>>> -  [14]: http://hc.apache.org
>>>>> \ No newline at end of file
>>>>> +  [14]: http://hc.apache.org
>>>>> +  [15]: 
>>>>> https://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/client/HttpClient.html
>>>>> +  [16]: https://hc.apache.org/httpcomponents-client-ga/examples.html
>>>>> +  [17]: 
>>>>> https://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/client/protocol/HttpClientContext.html
>>>>> \ No newline at end of file
>>>>> 
>>>>> Modified: jena/site/trunk/content/documentation/query/service.mdtext
>>>>> URL: 
>>>>> http://svn.apache.org/viewvc/jena/site/trunk/content/documentation/query/service.mdtext?rev=1768736&r1=1768735&r2=1768736&view=diff
>>>>> ==============================================================================
>>>>> --- jena/site/trunk/content/documentation/query/service.mdtext (original)
>>>>> +++ jena/site/trunk/content/documentation/query/service.mdtext Tue Nov  8 
>>>>> 16:53:48 2016
>>>>> @@ -48,19 +48,18 @@ distributed query evaluation. The algebr
>>>>> without regard to how selective the pattern is. So the order of the
>>>>> query will affect the speed of execution. Because it involves HTTP
>>>>> operations, asking the query in the right order matters a lot.
>>>>> -Don't ask for the whole of a bookstore just to find book whose
>>>>> +Don't ask for the whole of a bookstore just to find a book whose
>>>>> title comes from a local RDF file - ask the bookshop a query with
>>>>> the title already bound from earlier in the query.
>>>>> 
>>>>> ## Controlling `SERVICE` requests.
>>>>> 
>>>>> -The `SERVICE` operation in a SPARQL query may be configured via the 
>>>>> Context.
>>>>> -The values for configuration can be set in the global context (accessed 
>>>>> via
>>>>> +The `SERVICE` operation in a SPARQL query may be configured via the 
>>>>> Context. The values for configuration can be set in the global context 
>>>>> (accessed via
>>>>> `ARQ.getContext()`) or in the per-query execution context.
>>>>> 
>>>>> The prefix  `srv:` is the IRI `<http://jena.hpl.hp.com/Service#>`.
>>>>> 
>>>>> -### Summary
>>>>> +### Configuration for ARQ through version 3.1.0
>>>>> 
>>>>> Symbol | Usage
>>>>> ------ | -----
>>>>> @@ -71,7 +70,7 @@ Symbol | Usage
>>>>> `srv:queryAuthPwd` |  Basic authentication
>>>>> `srv:queryContext` | Per-endpoint configuration
>>>>> 
>>>>> -### `srv:queryTimeout`
>>>>> +#### `srv:queryTimeout`
>>>>> 
>>>>> Set the connect and read timeouts for the query.
>>>>> 
>>>>> @@ -86,21 +85,21 @@ read timout = 0
>>>>> 
>>>>> Values of 0 indicate no timeout and service operation will wait until the 
>>>>> remote server responds.
>>>>> 
>>>>> -### `srv:queryGzip`
>>>>> +#### `srv:queryGzip`
>>>>> 
>>>>> Sets the allow Gzip flag.
>>>>> 
>>>>> Boolean: True indicates that gzip compressed data is acceptable.
>>>>> false
>>>>> 
>>>>> -### `srv:queryDeflate`
>>>>> +#### `srv:queryDeflate`
>>>>> 
>>>>> Sets the allow Deflate flag.
>>>>> 
>>>>> Boolean: True indicates that deflate compression is acceptable
>>>>> False
>>>>> 
>>>>> -### `srv:queryAuthUser`
>>>>> +#### `srv:queryAuthUser`
>>>>> 
>>>>> Sets the user id for basic auth.
>>>>> 
>>>>> @@ -108,7 +107,7 @@ String: The user id to log in with
>>>>> 
>>>>> If null or null length no user id is sent.
>>>>> 
>>>>> -### `srv:queryAuthPwd`
>>>>> +#### `srv:queryAuthPwd`
>>>>> 
>>>>> Sets the password for basic auth.
>>>>> 
>>>>> @@ -116,13 +115,43 @@ String: The password to log in with.
>>>>> 
>>>>> If null or null length no password is sent.
>>>>> 
>>>>> -### srv:serviceContext
>>>>> +#### `srv:serviceContext`
>>>>> Provides a mechanism to override system context settings on a per URI 
>>>>> basis.
>>>>> 
>>>>> The value is a `Map<String,Context>` where the map key is the URI of the 
>>>>> service endpoint, and the `Context` is a set of values to override the 
>>>>> default values.
>>>>> 
>>>>> If a context is provided for the URI the system context is copied and the 
>>>>> URI specific values are then copied in.  This ensures that any URI 
>>>>> specific settings will be used.
>>>>> 
>>>>> +### Configuration for ARQ after version 3.1.0
>>>>> 
>>>>> +Symbol | Usage | Default
>>>>> +------ | ----- | -------
>>>>> +`srv:queryTimeout` | Set timeouts | none
>>>>> +`srv:queryCompression` | Enable use of deflation and GZip | true
>>>>> +`srv:queryClient` | Enable use of a specific client | none
>>>>> +`srv:queryContext` | Per-endpoint configuration | none
>>>>> +
>>>>> +#### `srv:queryTimeout`
>>>>> +
>>>>> +As documented above.
>>>>> +
>>>>> +
>>>>> +#### `srv:queryCompression`
>>>>> +
>>>>> +Sets the flag for use of deflation and GZip.
>>>>> +
>>>>> +Boolean: True indicates that gzip compressed data is acceptable.
>>>>> +
>>>>> +#### `srv:queryClient`
>>>>> +
>>>>> +Enable use of a specific client
>>>>> +
>>>>> +Provides a slot for a specific [HttpClient][1] for use with a specific 
>>>>> `SERVICE`
>>>>> +
>>>>> +#### `srv:serviceContext`
>>>>> +
>>>>> +As documented above.
>>>>> 
>>>>> [ARQ documentation index](index.html)
>>>>> +
>>>>> +[1]: 
>>>>> https://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/client/HttpClient.html
>>>>> 
>>>>> 
>>>> 
>> 

Reply via email to