[ 
https://issues.apache.org/jira/browse/HTTPCORE-346?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13719489#comment-13719489
 ] 

Erik Bunn edited comment on HTTPCORE-346 at 7/25/13 11:51 AM:
--------------------------------------------------------------

Oleg,

This is what I do. Doesn't work. As I originally state, the call to the 
HttpAsyncRequestHandler (e.g. in HttpAsyncService.requestReceived() -> 
handler.processRequest(...)) takes its HttpContext from an internal State 
object, where it is always initialized as an empty BasicHttpContext. 

In HttpAsyncService:

public void requestReceived(...) {
...
        HttpContext context = state.getContext();
...
        HttpAsyncRequestConsumer<Object> consumer = 
requestHandler.processRequest(request, context);
...
}

In HttpAsyncService$State:
    static class State {
        private final BasicHttpContext context;
...
        State() {
...
            this.context = new BasicHttpContext();
...
        }


(This is 4.2.4 code, but at a brief glance at 4.3b looked the same.)

So, back to my original questions, maybe adding one:
4) If none of 1...3, could we simply relax the package private members in 
HttpAsyncService to allow extending and customizing this class more?


I can submit a patch, but I'd like someone more familiar with the code to weigh 
in first.
Cheers,
//erik






                
      was (Author: ebudan):
    Oleg,

This is what I do. Doesn't work. As I originally state, the call to the 
HttpAsyncRequestHandler (e.g. in HttpAsyncService.requestReceived() -> 
handler.processRequest(...)) takes its HttpContext from an internal State 
object, where it is always initialized as an empty BasicHttpContext. 

In HttpAsyncService:

public void requestReceived(...) {
...
        HttpContext context = state.getContext();
...
        HttpAsyncRequestConsumer<Object> consumer = 
requestHandler.processRequest(request, context);
...
}

In HttpAsyncService$State:
    static class State {
        private final BasicHttpContext context;
...
        State() {
...
            this.context = new BasicHttpContext();
...
        }


(This is 4.2.4 code, but a brief glance at 4.3b looked the same.)

So, back to my original questions, maybe adding one:
4) If none of 1...3, could we simply relax the package private members in 
HttpAsyncService to allow extending and customizing this class more?


I can submit a patch, but I'd like someone more familiar with the code to weigh 
in first.
Cheers,
//erik






                  
> NIO: HttpAsyncService should couple IOSession and HttpContext 
> set/getAttribute()
> --------------------------------------------------------------------------------
>
>                 Key: HTTPCORE-346
>                 URL: https://issues.apache.org/jira/browse/HTTPCORE-346
>             Project: HttpComponents HttpCore
>          Issue Type: Wish
>          Components: HttpCore NIO
>    Affects Versions: 4.2.4, 4.3-beta2
>            Reporter: Erik Bunn
>            Priority: Minor
>
> Under httpcore-4.1, I wrote code that attached identifying information 
> (unique certificate id) to the IOSession attribute context in SSL 
> verification (where we have access to IOSession only, ), and utilized that 
> information at the request processing stage (where we have access to 
> HttpContext). HttpContext.getAttribute() proxied to its parent context, 
> eventually reaching the IOSession attributes.
> The refactoring for 4.2.x async processing has decoupled the HttpContext 
> object available in the HttpAsyncRequestHandler implementation methods from 
> the IOSession. Looking at HttpAsyncService.processRequest(), you can see that 
> it provides HttpAsyncRequestHandler.handle() and .processRequest() with the 
> (always empty) BasicHttpContext contained in its state.context. 
> At both locations, HttpAsyncService does have access to the 
> NHttpServerConnection containing the previously established 
> SessionHttpContext seen by IOSession. 
> 1) Could this context be sent to the HttpAsyncRequestHandler, instead of 
> state.context? 
> 2) Alternatively, would it be possible to initialize state.context attributes 
> with the contents of the session attributes in HttpAsyncService.connected() ?
> 3) Alternatively, would it be possible to modularize HttpAsyncService.state 
> creation to allow extending the class and customizing this behaviour?
> There may be security or nio object reuse implications that I am not 
> immediately seeing, and which might invalidate connecting the attribute 
> storage in this way. I would appreciate your input if that is the case. If 
> not, I would claim this is a bug in the recent nio HttpContext refactoring.  
> (Marked as minor under the assumption few people need to carry information 
> between such separated stages of iosession and request.)

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to