Hi,
I found an issue at the evaluatePreconditions method(ContainerRequest).
It seems re-evaluate after If-Unmodified-Since check and precondition failed(412).
This method should be as follows, I think.
public ResponseBuilder evaluatePreconditions(Date lastModified, EntityTag eTag) {
String ifMatchHeader = getRequestHeaders().getFirst("If-Match");
String ifNoneMatchHeader = getRequestHeaders().getFirst("If-None-Match");
String ifUnmodifiedSinceHeader = getRequestHeaders().getFirst("If-Unmodified-Since");
String ifModifiedSinceHeader = getRequestHeaders().getFirst("If-Modified-Since");
long lastModifiedTime = lastModified.getTime();
ResponseBuilder r = null;
if (ifMatchHeader != null) {
r = evaluateIfMatch(eTag);
if (r != null)
// 412 Precondition Failed
return r;
}
if (ifUnmodifiedSinceHeader != null) {
r = evaluateIfUnmodifiedSince(lastModifiedTime);
if (r != null)
// 412 Precondition Failed
return r;
}
if (ifNoneMatchHeader != null) {
r = evaluateIfNoneMatch(eTag);
String httpMethod = getMethod();
if (r == null || !(httpMethod.equals("GET") || httpMethod.equals("HEAD")))
// 200 OK
// 412 Precondition Failed
return r;
}
if (ifModifiedSinceHeader != null) {
if (r == null) {
r = evaluateIfModifiedSince(lastModifiedTime);
} else {
// 304 Not modified
// ETag already set by If-None-Match
if (evaluateIfModifiedSince(lastModifiedTime) == null)
r == null;
}
}
return r;
}
Thanks,
Hisaaki Sato