|
75 | 75 | import java.util.stream.Stream; |
76 | 76 |
|
77 | 77 | import javax.ws.rs.ClientErrorException; |
| 78 | +import javax.ws.rs.NotAcceptableException; |
78 | 79 | import javax.ws.rs.NotFoundException; |
79 | 80 | import javax.ws.rs.RedirectionException; |
80 | 81 | import javax.ws.rs.core.EntityTag; |
@@ -147,11 +148,16 @@ public ResponseBuilder initialize(final Resource resource) { |
147 | 148 |
|
148 | 149 | LOGGER.debug("Acceptable media types: {}", getRequest().getAcceptableMediaTypes()); |
149 | 150 |
|
150 | | - if (!LDP.NonRDFSource.equals(resource.getInteractionModel()) || getRequest().getExt() != null) { |
151 | | - this.syntax = getSyntax(getServices().getIOService(), |
152 | | - getRequest().getAcceptableMediaTypes(), resource.getBinaryMetadata() |
153 | | - .filter(b -> !DESCRIPTION.equals(getRequest().getExt())) |
154 | | - .map(b -> b.getMimeType().orElse(APPLICATION_OCTET_STREAM)).orElse(null)); |
| 151 | + // Get the requested syntax |
| 152 | + this.syntax = getSyntax(getServices().getIOService(), |
| 153 | + getRequest().getAcceptableMediaTypes(), resource.getBinaryMetadata() |
| 154 | + .filter(b -> !DESCRIPTION.equals(getRequest().getExt())) |
| 155 | + .map(b -> b.getMimeType().orElse(APPLICATION_OCTET_STREAM)).orElse(null)); |
| 156 | + |
| 157 | + // For LDP-NRs, if there is a negotiated RDF syntax, throw a 406 error |
| 158 | + if (LDP.NonRDFSource.equals(resource.getInteractionModel()) && getRequest().getExt() == null && |
| 159 | + this.syntax != null) { |
| 160 | + throw new NotAcceptableException(); |
155 | 161 | } |
156 | 162 |
|
157 | 163 | final IRI ext = getExtensionGraphName(); |
@@ -362,8 +368,8 @@ private CompletionStage<ResponseBuilder> getLdpNr(final ResponseBuilder builder) |
362 | 368 | final IRI dsid = getResource().getBinaryMetadata().map(BinaryMetadata::getIdentifier).orElse(null); |
363 | 369 |
|
364 | 370 | // Add standard headers |
365 | | - builder.header(ACCEPT_RANGES, "bytes").tag(etag) |
366 | | - .header(ALLOW, isMemento ? join(",", GET, HEAD, OPTIONS) : join(",", GET, HEAD, OPTIONS, PUT, DELETE)); |
| 371 | + builder.header(ACCEPT_RANGES, "bytes").tag(etag); |
| 372 | + addAllowHeaders(builder); |
367 | 373 |
|
368 | 374 | // Short circuit HEAD requests |
369 | 375 | if (HEAD.equals(getRequest().getMethod())) { |
|
0 commit comments