MARMOTTA-508: correctly implemented testContentTypeHeader()
Project: http://git-wip-us.apache.org/repos/asf/marmotta/repo Commit: http://git-wip-us.apache.org/repos/asf/marmotta/commit/8f100036 Tree: http://git-wip-us.apache.org/repos/asf/marmotta/tree/8f100036 Diff: http://git-wip-us.apache.org/repos/asf/marmotta/diff/8f100036 Branch: refs/heads/develop Commit: 8f1000361f1bcc323b60c556813f92e7cae6e860 Parents: 33d9d11 Author: Sergio Fernández <[email protected]> Authored: Mon Jul 14 15:53:27 2014 +0200 Committer: Sergio Fernández <[email protected]> Committed: Mon Jul 14 15:53:27 2014 +0200 ---------------------------------------------------------------------- .../core/filters/ModuleResourceFilter.java | 10 ++------- .../core/servlet/MarmottaOptionsFilter.java | 12 ++-------- .../core/servlet/MarmottaResourceFilter.java | 23 ++++++++++---------- .../platform/ldp/services/LdpServiceImpl.java | 4 ++-- .../marmotta/platform/ldp/util/LdpUtils.java | 2 +- .../platform/ldp/webservices/LdpWebService.java | 18 ++++++--------- .../filters/MarmottaAuthenticationFilter.java | 2 +- 7 files changed, 26 insertions(+), 45 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/marmotta/blob/8f100036/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/filters/ModuleResourceFilter.java ---------------------------------------------------------------------- diff --git a/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/filters/ModuleResourceFilter.java b/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/filters/ModuleResourceFilter.java index 36fd2f7..f15806f 100644 --- a/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/filters/ModuleResourceFilter.java +++ b/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/filters/ModuleResourceFilter.java @@ -21,6 +21,7 @@ import org.apache.marmotta.platform.core.api.config.ConfigurationService; import org.apache.marmotta.platform.core.api.modules.MarmottaHttpFilter; import org.apache.marmotta.platform.core.api.modules.MarmottaResourceService; import org.apache.marmotta.platform.core.api.modules.ResourceEntry; +import org.jboss.resteasy.spi.BadRequestException; import org.slf4j.Logger; import javax.enterprise.context.ApplicationScoped; @@ -52,7 +53,6 @@ public class ModuleResourceFilter implements MarmottaHttpFilter { @Inject private ConfigurationService configurationService; - /** * Return the pattern (regular expression) that a request URI (relative to the LMF base URI) has to match * before triggering this filter. @@ -125,11 +125,9 @@ public class ModuleResourceFilter implements MarmottaHttpFilter { ResourceEntry data = resourceService.getResource(path); - // if no: proceed with the chain by calling chain.doFilter() if(data != null && data.getLength() > 0) { - HttpServletResponse hresponse = (HttpServletResponse) response; if(configurationService.getBooleanConfiguration("resources.browsercache.enabled",true)) { @@ -152,15 +150,11 @@ public class ModuleResourceFilter implements MarmottaHttpFilter { if (log.isDebugEnabled()) { log.debug("request for {} took {}ms", url, System.currentTimeMillis() - starttime); } - return; } - - - } - chain.doFilter(request,response); + chain.doFilter(request, response); } /** http://git-wip-us.apache.org/repos/asf/marmotta/blob/8f100036/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/servlet/MarmottaOptionsFilter.java ---------------------------------------------------------------------- diff --git a/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/servlet/MarmottaOptionsFilter.java b/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/servlet/MarmottaOptionsFilter.java index 192ad7b..21ef781 100644 --- a/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/servlet/MarmottaOptionsFilter.java +++ b/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/servlet/MarmottaOptionsFilter.java @@ -17,6 +17,7 @@ */ package org.apache.marmotta.platform.core.servlet; +import org.jboss.resteasy.core.NoMessageBodyWriterFoundFailure; import org.jboss.resteasy.spi.DefaultOptionsMethodException; import org.jboss.resteasy.spi.ResteasyProviderFactory; @@ -76,27 +77,18 @@ public class MarmottaOptionsFilter implements Filter { */ @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { - - try { - chain.doFilter(request,response); - - } catch (DefaultOptionsMethodException ex) { + } catch (DefaultOptionsMethodException | NoMessageBodyWriterFoundFailure ex) { if(response instanceof HttpServletResponse) { HttpServletResponse resp = (HttpServletResponse)response; HttpServletRequest req = (HttpServletRequest)request; - if(req.getMethod().equalsIgnoreCase("OPTIONS")) { resp.setStatus(200); resp.resetBuffer(); - } } } - - - } /** http://git-wip-us.apache.org/repos/asf/marmotta/blob/8f100036/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/servlet/MarmottaResourceFilter.java ---------------------------------------------------------------------- diff --git a/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/servlet/MarmottaResourceFilter.java b/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/servlet/MarmottaResourceFilter.java index 2fb635c..7e0d81b 100644 --- a/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/servlet/MarmottaResourceFilter.java +++ b/platform/marmotta-core/src/main/java/org/apache/marmotta/platform/core/servlet/MarmottaResourceFilter.java @@ -20,6 +20,7 @@ package org.apache.marmotta.platform.core.servlet; import org.apache.marmotta.platform.core.api.config.ConfigurationService; import org.apache.marmotta.platform.core.api.modules.MarmottaHttpFilter; import org.apache.marmotta.platform.core.api.modules.ModuleService; +import org.jboss.resteasy.spi.BadRequestException; import org.slf4j.Logger; import javax.enterprise.inject.Any; @@ -32,6 +33,7 @@ import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.Serializable; import java.net.URL; @@ -80,7 +82,6 @@ public class MarmottaResourceFilter implements Filter { public void init(FilterConfig filterConfig) throws ServletException { log.info("Apache Marmotta Resource Filter {} starting up ... ", configurationService.getConfiguration("kiwi.version")); - // initialise filter chain and sort it according to priority this.filterList = new ArrayList<MarmottaHttpFilter>(); @@ -96,7 +97,6 @@ public class MarmottaResourceFilter implements Filter { } Collections.sort(filterList,new FilterComparator()); - } @@ -120,22 +120,22 @@ public class MarmottaResourceFilter implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { URL url = null; - String prefix = null, path = null; + String prefix, path = null; if (request instanceof HttpServletRequest) { - url = new URL(((HttpServletRequest)request).getRequestURL().toString()); + url = new URL(((HttpServletRequest)request).getRequestURL().toString()); prefix = ((HttpServletRequest)request).getContextPath(); if(url.getPath().startsWith(prefix)) { path = url.getPath().substring(prefix.length()); } } - new LMFFilterChain(path,chain).doFilter(request,response); - + try { + new MarmottaFilterChain(path, chain).doFilter(request, response); + } catch (BadRequestException e) { + ((HttpServletResponse)response).sendError(400, e.getMessage()); + } } - - - /** * Called by the web container to indicate to a filter that it is being taken out of service. This * method is only called once all threads within the filter's doFilter method have exited or after @@ -153,11 +153,10 @@ public class MarmottaResourceFilter implements Filter { } } - /** * A special filter chain that implements the LMFHttpFilter calls */ - private class LMFFilterChain implements FilterChain { + private class MarmottaFilterChain implements FilterChain { private Iterator<MarmottaHttpFilter> filters; @@ -165,7 +164,7 @@ public class MarmottaResourceFilter implements Filter { private FilterChain originalChain; - LMFFilterChain(String path, FilterChain originalChain) { + MarmottaFilterChain(String path, FilterChain originalChain) { this.path = path; this.filters = filterList.iterator(); this.originalChain = originalChain; http://git-wip-us.apache.org/repos/asf/marmotta/blob/8f100036/platform/marmotta-ldp/src/main/java/org/apache/marmotta/platform/ldp/services/LdpServiceImpl.java ---------------------------------------------------------------------- diff --git a/platform/marmotta-ldp/src/main/java/org/apache/marmotta/platform/ldp/services/LdpServiceImpl.java b/platform/marmotta-ldp/src/main/java/org/apache/marmotta/platform/ldp/services/LdpServiceImpl.java index 9a51791..09dcc69 100644 --- a/platform/marmotta-ldp/src/main/java/org/apache/marmotta/platform/ldp/services/LdpServiceImpl.java +++ b/platform/marmotta-ldp/src/main/java/org/apache/marmotta/platform/ldp/services/LdpServiceImpl.java @@ -281,7 +281,6 @@ public class LdpServiceImpl implements LdpService { connection.add(container, DCTERMS.modified, now, ldpContext); connection.add(resource, RDF.TYPE, LDP.Resource, ldpContext); - connection.add(resource, RDF.TYPE, LDP.RDFSource, ldpContext); connection.add(resource, ldpInteractionModelProperty, interactionModel.getUri(), ldpContext); connection.add(resource, DCTERMS.created, now, ldpContext); connection.add(resource, DCTERMS.modified, now, ldpContext); @@ -313,7 +312,8 @@ public class LdpServiceImpl implements LdpService { return binaryResource.stringValue(); } else { - log.debug("POST creates new LDP-SR, data provided as {}", rdfFormat.getName()); + log.debug("POST creates new LDP-RS, data provided as {}", rdfFormat.getName()); + connection.add(resource, RDF.TYPE, LDP.RDFSource, ldpContext); connection.add(container, LDP.contains, resource, ldpContext); // FIXME: We are (are we?) allowed to filter out server-managed properties here http://git-wip-us.apache.org/repos/asf/marmotta/blob/8f100036/platform/marmotta-ldp/src/main/java/org/apache/marmotta/platform/ldp/util/LdpUtils.java ---------------------------------------------------------------------- diff --git a/platform/marmotta-ldp/src/main/java/org/apache/marmotta/platform/ldp/util/LdpUtils.java b/platform/marmotta-ldp/src/main/java/org/apache/marmotta/platform/ldp/util/LdpUtils.java index 039c923..4d50162 100644 --- a/platform/marmotta-ldp/src/main/java/org/apache/marmotta/platform/ldp/util/LdpUtils.java +++ b/platform/marmotta-ldp/src/main/java/org/apache/marmotta/platform/ldp/util/LdpUtils.java @@ -87,7 +87,7 @@ public class LdpUtils { * @return the mimeType */ public static String getMimeType(MediaType mediaType) { - return String.format("%s/%s", mediaType.getType(), mediaType.getSubtype()); + return (mediaType != null ? String.format("%s/%s", mediaType.getType(), mediaType.getSubtype()) : ""); } /** http://git-wip-us.apache.org/repos/asf/marmotta/blob/8f100036/platform/marmotta-ldp/src/main/java/org/apache/marmotta/platform/ldp/webservices/LdpWebService.java ---------------------------------------------------------------------- diff --git a/platform/marmotta-ldp/src/main/java/org/apache/marmotta/platform/ldp/webservices/LdpWebService.java b/platform/marmotta-ldp/src/main/java/org/apache/marmotta/platform/ldp/webservices/LdpWebService.java index 60c21cf..9a01c94 100644 --- a/platform/marmotta-ldp/src/main/java/org/apache/marmotta/platform/ldp/webservices/LdpWebService.java +++ b/platform/marmotta-ldp/src/main/java/org/apache/marmotta/platform/ldp/webservices/LdpWebService.java @@ -119,21 +119,17 @@ public class LdpWebService { } final RDFFormat format; - if ("text/plain".equals(LdpUtils.getMimeType(type))) { + final RDFFormat fallback = (ldpService.isNonRdfSourceResource(conn, resource) ? null : RDFFormat.TURTLE); + final String mimeType = LdpUtils.getMimeType(type); + if (StringUtils.isBlank(mimeType) || "text/plain".equals(mimeType)) { // TODO: find a better way to support n-triples (text/plain) // while still supporting regular text files format = null; + } else if (type.isWildcardSubtype() && "text".equals(type.getType())) { + format = RDFFormat.TURTLE; } else { - if (type.isWildcardSubtype()) { - if (type.isWildcardType() || "text".equals(type.getType())) { - format = RDFFormat.TURTLE; - } else { - ContentType contentType = MarmottaHttpUtils.performContentNegotiation(LdpUtils.getMimeType(type), exportService.getProducedTypes()); - format = (contentType != null ? Rio.getWriterFormatForMIMEType(contentType.getMime(), RDFFormat.TURTLE) : null); - } - } else { - format = Rio.getWriterFormatForMIMEType(LdpUtils.getMimeType(type), RDFFormat.TURTLE); - } + ContentType contentType = MarmottaHttpUtils.performContentNegotiation(mimeType, exportService.getProducedTypes()); + format = (contentType != null ? Rio.getWriterFormatForMIMEType(contentType.getMime(), fallback) : fallback); } if (format == null) { http://git-wip-us.apache.org/repos/asf/marmotta/blob/8f100036/platform/marmotta-user/src/main/java/org/apache/marmotta/platform/user/filters/MarmottaAuthenticationFilter.java ---------------------------------------------------------------------- diff --git a/platform/marmotta-user/src/main/java/org/apache/marmotta/platform/user/filters/MarmottaAuthenticationFilter.java b/platform/marmotta-user/src/main/java/org/apache/marmotta/platform/user/filters/MarmottaAuthenticationFilter.java index 1706178..6bde0d4 100644 --- a/platform/marmotta-user/src/main/java/org/apache/marmotta/platform/user/filters/MarmottaAuthenticationFilter.java +++ b/platform/marmotta-user/src/main/java/org/apache/marmotta/platform/user/filters/MarmottaAuthenticationFilter.java @@ -87,7 +87,7 @@ public class MarmottaAuthenticationFilter implements MarmottaHttpFilter { */ @Override public void init(FilterConfig filterConfig) throws ServletException { - log.info("LMF Authentication Filter starting up; user authentication is {}",configurationService.getBooleanConfiguration("security.enabled",true)?"enabled":"disabled"); + log.info("armotta Authentication Filter starting up; user authentication is {}", configurationService.getBooleanConfiguration("security.enabled", true)?"enabled":"disabled"); }
