Hi Tamas,
 
I found the cause of your second issue and was able to fix it. Now if there is 
an entity associated to a DELETE request, it is simply ignored by the client 
connector and not sent over the wire. The server doesn't notice it at all.
 
Thanks for reporting this. Fix in SVN trunk.
 
Best regards,
Jérôme Louvel
--
Restlet ~ Founder and Lead developer ~  <http://www.restlet.org/> 
http://www.restlet.org
Noelios Technologies ~ Co-founder ~  <http://www.noelios.com/> 
http://www.noelios.com

  _____  

De : [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] De la part de Tamás Cservenák
Envoyé : mercredi 17 septembre 2008 17:32
À : [email protected]
Objet : Re: Any reason to override 401 to 1002?


Hi Jerome,

yes, regarding my 1st issue I solved it by registering the HTTP_NxBasic auth 
scheme just as you described. But in my opinion, this is a little bit to "heavy 
handed" solution... i have to wait to 1.1 "final" release (or RC2?) to update 
the dependencies, since we will roll out Nexus 1.1M1 soon (so, no snapshot 
dependency is desirable). Anyway, it works now just fine (after registering the 
new auth scheme, we have the desired 401 status instead of 1002 in the ITs).

My 2nd issue: I created a little "test case" maven project, attached to the 
mail. Simply unzip it, and do "$ mvn clean test" and the test-case will simply 
"hang" (the behaviour we noticed with our IT tests also).

I am not sure anymore about my statements in 1st mail, but something is 
definitely wrong. Try to simply change the restlet version in POM properties 
section from current 1.1-RC1 back to 1.0.11 and the hang will dissapear!

~t~



On Wed, Sep 17, 2008 at 4:13 PM, Jerome Louvel <[EMAIL PROTECTED]> wrote:


Hi Tamas,
 
Thanks for reporting those issues. I've made some changes in SVN trunk so that 
unknown challenge schemes should hide anymore the actual response status 
received. Let me know if it doesn't work.
 
However, in order to make your solution fully work, you'll have to declare a 
proper AuthenticationHelper for HTTP_NxBASIC scheme and register it with the 
Restlet engine. Since Restlet 1.1, we now support pluggagle authentication 
helpers for extensibility purpose.
 
See OAuth extension for an example on how to do that (basically adding a 
META-INF/services/com.noelios.restlet.AuthenticationHelper file pointing to an 
AuthenticationHelper subclass). 
 
In your case, you could probably directly reuse the 
com.noelios.restlet.authentication.HttpBasicHelper class.
 
--
 
Regarding DELETE, the spec doesn't seem to forbid passing an entity:
http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.7
 
I'm not sure to understand how you got into this state in a first place. Could 
you describe your scenario a bit more? 
 


Best regards,
Jérôme Louvel
--
Restlet ~ Founder and Lead developer ~  <http://www.restlet.org/> 
http://www.restlet.org
Noelios Technologies ~ Co-founder ~  <http://www.noelios.com/> 
http://www.noelios.com

  _____  

De : [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] De la part de Tamás Cservenák
Envoyé : mardi 16 septembre 2008 19:29
À : [email protected]
Objet : Any reason to override 401 to 1002?


Hello there,

i am seeking for any answer on reason of overriding the 401 HTTP status code to 
1002 in the Restlet Client.

We are using the HTTP Restlet Client (1.1-RC1) in the IT tests of Sonatype 
Nexus, and after the change (from 1.0.x line) we noticed a bunch of IT failures.

As it turned out, it boils down to the reason that restlet Client simply "says" 
1002 instead of expected 401. The reason:

"java.lang.IllegalArgumentException: Challenge scheme HTTP_NxBASIC not 
supported by the Restlet engine."

Because of ExtJS + HTTP Basic issues (browsers "stealing" auth) we changed the 
auth scheme -- actually renamed the Basic to NxBasic -- only to avoid browser 
login pop-up. But the 1.1-RC1 client simply overrides (HttpClientConverter, 
line 471) the 401 status with 1002, since Nexus responded with Challenge scheme 
"NxBasic".

Any way to fix this at Client side, to have the _real_ response and not 
information about the fact that client is not supporting something? ;)

---

Also, we discovered another bug (?): Our ITs were always (was not checking for 
HTTP Method in question) invoking request.setEntity(aValue) on Requests 
processed with Restlet Client, and it was working fine with Client 1.0.x. Now, 
with 1.1-RC1, something changed, and it produces strange requests (i may say 
malformed ones). Like for example this (HttpClient wire log):

2008-09-15 21:52:33.280 DEBUG [main:] - httpclient.wire.header: >> "DELETE 
/nexus/service/local/repo_targets/11c678c3265 HTTP/1.1[\r][\n]"
2008-09-15 21:52:33.280 DEBUG [main:] - 
org.apache.commons.httpclient.HttpMethodBase: Adding Host request header
2008-09-15 21:52:33.280 DEBUG [main:] - httpclient.wire.header: >> "User-Agent: 
Noelios-Restlet-Engine/1.1.rc1[\r][\n]"
2008-09-15 21:52:33.280 DEBUG [main:] - httpclient.wire.header: >> "Accept: 
*/*[\r][\n]"
2008-09-15 21:52:33.280 DEBUG [main:] - httpclient.wire.header: >> 
"Content-Type: application/json; charset=UTF-8[\r][\n]"
2008-09-15 21:52:33.280 DEBUG [main:] - httpclient.wire.header: >> 
"Content-Length: 106[\r][\n]"
2008-09-15 21:52:33.281 DEBUG [main:] - httpclient.wire.header: >> "Host: 
localhost:8087[\r][\n]"
2008-09-15 21:52:33.281 DEBUG [main:] - httpclient.wire.header: >> "[\r][\n]"

So, it is a DELETE, with content type and content length set (!). Not to 
mention, that it confused the restlet (also 1.1-RC1) on server side, and caused 
both to simply wait for each other it seems (the IT Client sent only one CR+LF, 
while the server side restlet was waiting for two (it seems it was waiting for 
body?), since no body was present, but content length was there)... so, 
finally, both timeouted and declared that other party was having some HTTP 
issues.

I mean, i am aware that it was possibly an API "misuse" (setting the entity of 
the Request with DELETE method), but it was working in 1.0.x line just perfect. 
What happened? We fixed this issues by checking the method in question, but IMO 
this should be handled by Request/Client and not by users. Why do we have then 
restlet abstraction at all when the user should "watch" for HTTP Message 
correctness then?

-- 
Thanks,
~t~





-- 
Thanks,
~t~

Reply via email to