Hello, thanks for your report, the fix is available in the svn repository.
Best regards, Thierry Boileau > I am trying to send a conditional PUT to a Restlet resource using the > 'If-None-Match: *' header, basically I need the PUT to succeed if no entity > exists and to fail if it does exist (see > http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.26). The current > behavior of Restlet appears to be the opposite. > > Within ServerResource.doConditionalHandle() if the resource does not exist > resultInfo ends up null so Conditions.getStatus(...) is never consulted and a > 404 is returned. > > When the resource does exist resultInfo is non-null and > Conditions.getStatus(...) is invoked. The If-None-Match rule if (Conditions > line #273) then enters the entityExists if block, but since my entity tag is > null 'matched' is left as false even though the existence of the entity > should cause a match when '*' is specified, as stated in the spec: "the > method MUST NOT be performed if the representation selected by the origin > server (or by a cache, possibly using the Vary mechanism, see section 14.44) > exists." Since matched is left as false the PUT is allowed to proceed, > overwriting the previously existing resource. > > Also as a side note, within the If-None-Match rule if the entity does not > exist (entityExists = false) matched is set to > 'getNoneMatch().get(0).equals(Tag.ALL)', whereas it should remain false. > > ------------------------------------------------------ > http://restlet.tigris.org/ds/viewMessage.do?dsForumId=4447&dsMessageId=2449400 > > ------------------------------------------------------ http://restlet.tigris.org/ds/viewMessage.do?dsForumId=4447&dsMessageId=2450533

