Return-Path: X-Original-To: apmail-jena-commits-archive@www.apache.org Delivered-To: apmail-jena-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id A9342100ED for ; Mon, 5 Jan 2015 17:33:39 +0000 (UTC) Received: (qmail 16611 invoked by uid 500); 5 Jan 2015 17:33:40 -0000 Delivered-To: apmail-jena-commits-archive@jena.apache.org Received: (qmail 16564 invoked by uid 500); 5 Jan 2015 17:33:40 -0000 Mailing-List: contact commits-help@jena.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@jena.apache.org Delivered-To: mailing list commits@jena.apache.org Received: (qmail 16539 invoked by uid 99); 5 Jan 2015 17:33:40 -0000 Received: from tyr.zones.apache.org (HELO tyr.zones.apache.org) (140.211.11.114) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 05 Jan 2015 17:33:40 +0000 Received: by tyr.zones.apache.org (Postfix, from userid 65534) id 510DDA3FE88; Mon, 5 Jan 2015 17:33:40 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit From: andy@apache.org To: commits@jena.apache.org Date: Mon, 05 Jan 2015 17:33:41 -0000 Message-Id: <4d0a388b85d84de985d6e97d7edbf283@git.apache.org> In-Reply-To: <0090ceb9d47b484f8bfca94f6197420c@git.apache.org> References: <0090ceb9d47b484f8bfca94f6197420c@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [02/51] [abbrv] [partial] jena git commit: Maven modules for Fuseki2 http://git-wip-us.apache.org/repos/asf/jena/blob/470ee4d7/jena-fuseki2/src/main/java/org/apache/jena/fuseki/server/RequestLog.java ---------------------------------------------------------------------- diff --git a/jena-fuseki2/src/main/java/org/apache/jena/fuseki/server/RequestLog.java b/jena-fuseki2/src/main/java/org/apache/jena/fuseki/server/RequestLog.java deleted file mode 100644 index db79d6a..0000000 --- a/jena-fuseki2/src/main/java/org/apache/jena/fuseki/server/RequestLog.java +++ /dev/null @@ -1,148 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.jena.fuseki.server; - -import java.text.DateFormat ; -import java.text.SimpleDateFormat ; -import java.util.Collection ; -import java.util.Date ; -import java.util.Enumeration ; -import java.util.TimeZone ; - -import javax.servlet.http.HttpServletRequest ; -import javax.servlet.http.HttpServletResponse ; - -import org.apache.jena.atlas.logging.Log ; -import org.apache.jena.fuseki.servlets.HttpAction ; - -/** Create standard request logs (NCSA etc) */ -public class RequestLog { - /* - http://httpd.apache.org/docs/current/mod/mod_log_config.html -Common Log Format (CLF) - "%h %l %u %t \"%r\" %>s %b" -Common Log Format with Virtual Host - "%v %h %l %u %t \"%r\" %>s %b" -NCSA extended/combined log format - "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" - */ - /* - %l -- Identity or - - %u -- Remote user or - - %t -- Timestamp - "%r" -- Request line - %>s -- Final request status - %b -- Size in bytes - Headers. - %{}i for request header. - %{}o for response header. - */ - - private static DateFormat dateFormatter ; - static { - dateFormatter = new SimpleDateFormat("dd/MMM/yyyy:HH:mm:ss Z") ; - dateFormatter.setTimeZone(TimeZone.getTimeZone("UTC")); - } - - /** NCSA combined log format * - * LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combinedfwd - * XXX.XXX.XXX.XXX - - [01/Feb/2014:03:19:09 +0000] "GET / HTTP/1.1" 200 6190 "-" "check_http/v1.4.16 (nagios-plugins 1.4.16)" - */ - public static String combinedNCSA(HttpAction action) { - StringBuilder builder = new StringBuilder() ; - HttpServletRequest request = action.request ; - HttpServletResponse response = action.response ; - - // Remote - String remote = get(request, "X-Forwarded-For", request.getRemoteAddr()) ; - builder.append(remote) ; - builder.append(" ") ; - - // %l %u : User identity (unrelaible) - builder.append("- - ") ; - - // %t - // Expensive? - builder.append("["); - // Better? - builder.append(dateFormatter.format(new Date())) ; - builder.append("] "); - - // "%r" - builder.append("\"") ; - builder.append(request.getMethod()) ; - builder.append(" ") ; - // No query string - they are long and logged readably elsewhere - builder.append(request.getRequestURI()) ; - builder.append("\"") ; - //%>s -- Final request status - builder.append(" ") ; - builder.append(response.getStatus()) ; - - //%b -- Size in bytes - builder.append(" ") ; - //String size = getField() - String size = get(response, "Content-Length", "-") ; - builder.append(size) ; - - // "%{Referer}i" - builder.append(" \"") ; - builder.append(get(request, "Referer", "")) ; - builder.append("\"") ; - // "%{User-Agent}i" - builder.append(" \"") ; - builder.append(get(request, "User-Agent", "")) ; - builder.append("\"") ; - - return builder.toString() ; - } - - private static String get(HttpServletRequest request, String name, String dft) { - String x = get(request, name) ; - if ( x == null ) - x = dft ; - return x ; - } - - private static String get(HttpServletRequest request, String name) { - Enumeration en = request.getHeaders(name) ; - if ( ! en.hasMoreElements() ) return null ; - String x = en.nextElement() ; - if ( en.hasMoreElements() ) { - Log.warn(RequestLog.class, "Multiple request header values") ; - } - return x ; - } - - private static String get(HttpServletResponse response, String name, String dft) { - String x = get(response, name) ; - if ( x == null ) - x = dft ; - return x ; - } - - - private static String get(HttpServletResponse response, String name) { - Collection en = response.getHeaders(name) ; - if ( en.isEmpty() )return null ; - if ( en.size() != 1 ) Log.warn(RequestLog.class, "Multiple response header values") ; - return response.getHeader(name) ; - } - -} http://git-wip-us.apache.org/repos/asf/jena/blob/470ee4d7/jena-fuseki2/src/main/java/org/apache/jena/fuseki/server/ServerInitialConfig.java ---------------------------------------------------------------------- diff --git a/jena-fuseki2/src/main/java/org/apache/jena/fuseki/server/ServerInitialConfig.java b/jena-fuseki2/src/main/java/org/apache/jena/fuseki/server/ServerInitialConfig.java deleted file mode 100644 index 67f5d26..0000000 --- a/jena-fuseki2/src/main/java/org/apache/jena/fuseki/server/ServerInitialConfig.java +++ /dev/null @@ -1,40 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.jena.fuseki.server; - -import java.util.HashMap ; -import java.util.Map ; - -import com.hp.hpl.jena.sparql.core.DatasetGraph ; - -/** Dataset setup (command line, config file) for a dataset (or several if config file) */ -public class ServerInitialConfig { - // Either this ... - public String templateFile = null ; - public Map params = new HashMap<>() ; - public String datasetPath = null ; - public boolean allowUpdate = false ; - // Or this ... - public String fusekiConfigFile = null ; - - // Special case - directly pass in the dataset graphs - datasetPath must be given. - // This is not persistet across server restarts. - public DatasetGraph dsg = null ; - -} http://git-wip-us.apache.org/repos/asf/jena/blob/470ee4d7/jena-fuseki2/src/main/java/org/apache/jena/fuseki/server/ServiceMXBean.java ---------------------------------------------------------------------- diff --git a/jena-fuseki2/src/main/java/org/apache/jena/fuseki/server/ServiceMXBean.java b/jena-fuseki2/src/main/java/org/apache/jena/fuseki/server/ServiceMXBean.java deleted file mode 100644 index 11c7330..0000000 --- a/jena-fuseki2/src/main/java/org/apache/jena/fuseki/server/ServiceMXBean.java +++ /dev/null @@ -1,32 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.jena.fuseki.server; - -public interface ServiceMXBean -{ - String getName() ; - - long getRequests() ; - long getRequestsGood() ; - long getRequestsBad() ; - -// void enable() ; -// void disable() ; -} - http://git-wip-us.apache.org/repos/asf/jena/blob/470ee4d7/jena-fuseki2/src/main/java/org/apache/jena/fuseki/server/ShiroEnvironmentLoader.java ---------------------------------------------------------------------- diff --git a/jena-fuseki2/src/main/java/org/apache/jena/fuseki/server/ShiroEnvironmentLoader.java b/jena-fuseki2/src/main/java/org/apache/jena/fuseki/server/ShiroEnvironmentLoader.java deleted file mode 100644 index f33fe92..0000000 --- a/jena-fuseki2/src/main/java/org/apache/jena/fuseki/server/ShiroEnvironmentLoader.java +++ /dev/null @@ -1,164 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.jena.fuseki.server; - -import java.io.IOException ; -import java.io.InputStream ; -import java.nio.file.Path ; -import java.nio.file.Paths ; - -import javax.servlet.ServletContext ; -import javax.servlet.ServletContextEvent ; -import javax.servlet.ServletContextListener ; - -import org.apache.jena.fuseki.Fuseki ; -import org.apache.shiro.config.ConfigurationException ; -import org.apache.shiro.io.ResourceUtils ; -import org.apache.shiro.web.env.EnvironmentLoader ; -import org.apache.shiro.web.env.ResourceBasedWebEnvironment ; -import org.apache.shiro.web.env.WebEnvironment ; - -import com.hp.hpl.jena.util.FileUtils ; - -/** A place to perform Fuseki-specific initialization of Apache Shiro. - * Runs after listener FusekiServerEnvironmentInit and before FusekiServerListener - * This means finding shiro.ini in multiple possible places, based on - * different deployment setups. - */ -public class ShiroEnvironmentLoader extends EnvironmentLoader implements ServletContextListener { - private ServletContext servletContext ; - - public ShiroEnvironmentLoader() {} - - @Override - public void contextInitialized(ServletContextEvent sce) { - FusekiServer.init() ; - this.servletContext = sce.getServletContext() ; - try { - // Shiro. - initEnvironment(servletContext); - } catch (ConfigurationException ex) { - Fuseki.configLog.error("Shiro initialization failed: "+ex.getMessage()); - // Exit? - throw ex ; - } - } - - @Override - public void contextDestroyed(ServletContextEvent sce) { - destroyEnvironment(sce.getServletContext()); - } - - /** - * Normal Shiro initialization only supports one location for an INI file. - * - * When given multiple multiple locations for the shiro.ini file, and - * if a {@link ResourceBasedWebEnvironment}, check the list of configuration - * locations, testing whether the name identified an existing resource. - * For the first resource name found to exist, reset the {@link ResourceBasedWebEnvironment} - * to name that resource alone so the normal Shiro initialization - */ - @Override - protected void customizeEnvironment(WebEnvironment environment) { - if ( environment instanceof ResourceBasedWebEnvironment ) { - ResourceBasedWebEnvironment env = (ResourceBasedWebEnvironment)environment ; - String[] locations = env.getConfigLocations() ; - String loc = huntForShiroIni(locations) ; - Fuseki.configLog.info("Shiro file: "+loc); - if (loc != null ) - locations = new String[] {loc} ; - env.setConfigLocations(locations); - } - } - - private static final String FILE = "file" ; - - /** Look for a Shiro ini file, or return null */ - private static String huntForShiroIni(String[] locations) { - FusekiEnv.setEnvironment() ; - Fuseki.init(); - for ( String loc : locations ) { - // If file:, look for that file. - // If a relative name without scheme, look in FUSEKI_BASE, FUSEKI_HOME, webapp. - String scheme = FileUtils.getScheme(loc) ; - - // Covers C:\\ as a "scheme name" - if ( scheme != null ) { - if ( scheme.equalsIgnoreCase(FILE)) { - // Test file: for exists - Path p = Paths.get(loc.substring(FILE.length()+1)) ; - if ( ! p.toFile().exists() ) - continue ; - // Fall through. - } - // Can't test - try - return loc ; - } - // No scheme . - Path p = Paths.get(loc) ; - - String fn = resolve(FusekiEnv.FUSEKI_BASE, p) ; - if ( fn != null ) - return "file://"+fn ; - fn = resolve(FusekiEnv.FUSEKI_HOME, p) ; - if ( fn != null ) - return "file://"+fn ; - - // Try in webapp. - - try ( InputStream is = ResourceUtils.getInputStreamForPath(loc); ) { - boolean exists = (is != null ) ; - return loc ; - } catch (IOException e) { } - } - return null ; - } - - /** Directory + name -> filename if it exists */ - private static String resolve(Path dir, Path file) { - Path p = dir.resolve(file) ; - if ( p.toFile().exists() ) - return p.normalize().toString() ; - return null ; - } - -// /** -// * Test whether a name identified an existing resource -// * @param resource A String in Shiro-resource name format (e.g. URL scheme names) -// * @return True/false as to whether the resource can be found or not. -// */ -// -// private boolean resourceExists(String resource) { -// try { -// // See IniWebEnvironment.convertPathToIni -// if (!ResourceUtils.hasResourcePrefix(resource)) { -// //Sort out "path" and open as a webapp resource. -// resource = WebUtils.normalize(resource); -// URL url = servletContext.getResource(resource) ; -// return ( url == null ) ; -// } else { -// // Treat as a plain name. -// InputStream is = ResourceUtils.getInputStreamForPath(resource); -// boolean exists = (is != null ) ; -// is.close() ; -// return exists ; -// } -// } catch (IOException e) { return false ; } -// } -} http://git-wip-us.apache.org/repos/asf/jena/blob/470ee4d7/jena-fuseki2/src/main/java/org/apache/jena/fuseki/server/SystemState.java ---------------------------------------------------------------------- diff --git a/jena-fuseki2/src/main/java/org/apache/jena/fuseki/server/SystemState.java b/jena-fuseki2/src/main/java/org/apache/jena/fuseki/server/SystemState.java deleted file mode 100644 index 74117c9..0000000 --- a/jena-fuseki2/src/main/java/org/apache/jena/fuseki/server/SystemState.java +++ /dev/null @@ -1,108 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.jena.fuseki.server; - -import org.apache.jena.atlas.lib.FileOps ; -import org.apache.jena.atlas.lib.StrUtils ; -import org.apache.jena.fuseki.Fuseki ; - -import com.hp.hpl.jena.query.Dataset ; -import com.hp.hpl.jena.tdb.StoreConnection ; -import com.hp.hpl.jena.tdb.TDB ; -import com.hp.hpl.jena.tdb.TDBFactory ; -import com.hp.hpl.jena.tdb.base.block.FileMode ; -import com.hp.hpl.jena.tdb.base.file.Location ; -import com.hp.hpl.jena.tdb.setup.StoreParams ; -import com.hp.hpl.jena.tdb.transaction.DatasetGraphTransaction ; - -public class SystemState { - private static String SystemDatabaseLocation ; - // Testing may reset this. - public static Location location ; - - private static Dataset dataset = null ; - private static DatasetGraphTransaction dsg = null ; - - public static Dataset getDataset() { - init() ; - return dataset ; - } - - public static DatasetGraphTransaction getDatasetGraph() { - init() ; - return dsg ; - } - - private static boolean initialized = false ; - private static void init() { - init$() ; - } - - /** Small footprint database. The system database records the server state. - * It should not be performance critical, mainly being used for system admin - * functions. - *

Direct mode so that it is not competing for OS file cache space. - *

Small caches - - */ - private static final StoreParams systemDatabaseParams = StoreParams.builder() - .fileMode(FileMode.direct) - .blockReadCacheSize(20) - .blockWriteCacheSize(20) - .node2NodeIdCacheSize(5000) - .nodeId2NodeCacheSize(5000) - .nodeMissCacheSize(100) - .build() ; - - public /* for testing */ static void init$() { - if ( initialized ) - return ; - initialized = true ; - - if ( location == null ) - location = Location.create(FusekiServer.dirSystemDatabase.toString()) ; - - if ( ! location.isMem() ) - FileOps.ensureDir(location.getDirectoryPath()) ; - - // Force it into the store connection as a low footprint - if ( StoreConnection.getExisting(location) != null ) - Fuseki.serverLog.warn("System database already in the StoreConnection cache") ; - StoreConnection.make(location, systemDatabaseParams) ; - - dataset = TDBFactory.createDataset(location) ; - dsg = (DatasetGraphTransaction)(dataset.asDatasetGraph()) ; - dsg.getContext().set(TDB.symUnionDefaultGraph, false) ; - } - - public static String PREFIXES = StrUtils.strjoinNL - ("BASE ", - "PREFIX ja: ", - "PREFIX fu: ", - "PREFIX fuseki: ", - "PREFIX rdf: ", - "PREFIX rdfs: ", - "PREFIX tdb: ", - "PREFIX sdb: ", - "PREFIX list: ", - "PREFIX xsd: ", - "PREFIX apf: ", - "PREFIX afn: ", - "") ; -} - http://git-wip-us.apache.org/repos/asf/jena/blob/470ee4d7/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/ActionBase.java ---------------------------------------------------------------------- diff --git a/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/ActionBase.java b/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/ActionBase.java deleted file mode 100644 index 3e45c78..0000000 --- a/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/ActionBase.java +++ /dev/null @@ -1,265 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.jena.fuseki.servlets; - -import static java.lang.String.format ; - -import java.io.IOException ; -import java.util.Enumeration ; -import java.util.Map ; - -import javax.servlet.ServletException ; -import javax.servlet.http.HttpServletRequest ; -import javax.servlet.http.HttpServletResponse ; - -import org.apache.jena.atlas.RuntimeIOException ; -import org.apache.jena.fuseki.Fuseki ; -import org.apache.jena.riot.web.HttpNames ; -import org.apache.jena.web.HttpSC ; -import org.slf4j.Logger ; - -import com.hp.hpl.jena.query.ARQ ; -import com.hp.hpl.jena.query.QueryCancelledException ; -import com.hp.hpl.jena.sparql.util.Context ; - -/** General request lifecycle */ -public abstract class ActionBase extends ServletBase -{ - protected final Logger log ; - - protected ActionBase(Logger log) { - super() ; - this.log = log ; - } - - @Override - public void init() { -// log.info("["+Utils.className(this)+"] ServletContextName = "+getServletContext().getServletContextName()) ; -// log.info("["+Utils.className(this)+"] ContextPath = "+getServletContext().getContextPath()) ; - - //super.init() ; - } - - /** - * Common framework for handling HTTP requests. - * @param request - * @param response - */ - protected void doCommon(HttpServletRequest request, HttpServletResponse response) - { - try { - long id = allocRequestId(request, response); - - // Lifecycle - HttpAction action = allocHttpAction(id, request, response) ; - - printRequest(action) ; - action.setStartTime() ; - - // The response may be changed to a HttpServletResponseTracker - response = action.response ; - initResponse(request, response) ; - Context cxt = ARQ.getContext() ; - - try { - execCommonWorker(action) ; - } catch (QueryCancelledException ex) { - // Also need the per query info ... - String message = String.format("The query timed out (restricted to %s ms)", cxt.get(ARQ.queryTimeout)); - // Possibility :: response.setHeader("Retry-after", "600") ; // 5 minutes - ServletOps.responseSendError(response, HttpSC.SERVICE_UNAVAILABLE_503, message); - } catch (ActionErrorException ex) { - if ( ex.exception != null ) - ex.exception.printStackTrace(System.err) ; - // Log message done by printResponse in a moment. - if ( ex.message != null ) - ServletOps.responseSendError(response, ex.rc, ex.message) ; - else - ServletOps.responseSendError(response, ex.rc) ; - } catch (RuntimeIOException ex) { - log.warn(format("[%d] Runtime IO Exception (client left?) RC = %d : %s", id, HttpSC.INTERNAL_SERVER_ERROR_500, ex.getMessage()), ex) ; - ServletOps.responseSendError(response, HttpSC.INTERNAL_SERVER_ERROR_500, ex.getMessage()) ; - } catch (Throwable ex) { - // This should not happen. - //ex.printStackTrace(System.err) ; - log.warn(format("[%d] RC = %d : %s", id, HttpSC.INTERNAL_SERVER_ERROR_500, ex.getMessage()), ex) ; - ServletOps.responseSendError(response, HttpSC.INTERNAL_SERVER_ERROR_500, ex.getMessage()) ; - } - - action.setFinishTime() ; - printResponse(action) ; - archiveHttpAction(action) ; - } catch (Throwable th) { - log.error("Internal error", th) ; - } - } - - // ---- Operation lifecycle - - /** - * Returns a fresh HTTP Action for this request. - * @param id the Request ID - * @param request HTTP request - * @param response HTTP response - * @return a new HTTP Action - */ - protected HttpAction allocHttpAction(long id, HttpServletRequest request, HttpServletResponse response) { - // Need a way to set verbose logging on a per servlet and per request basis. - return new HttpAction(id, log, request, response, Fuseki.verboseLogging) ; - } - - /** - * Begin handling an {@link HttpAction} - * @param action - */ - protected final void startRequest(HttpAction action) { - action.startRequest() ; - } - - /** - * Stop handling an {@link HttpAction} - */ - protected final void finishRequest(HttpAction action) { - action.finishRequest() ; - } - - /** - * Archives the HTTP Action. - * @param action HTTP Action - * @see HttpAction#minimize() - */ - private void archiveHttpAction(HttpAction action) { - action.minimize() ; - } - - /** - * Execute this request, which maybe a admin operation or a client request. - * @param action HTTP Action - */ - protected abstract void execCommonWorker(HttpAction action) ; - - /** Extract the name after the container name (serverlet name). - * Returns "/name" or null - */ - protected static String extractItemName(HttpAction action) { -// action.log.info("context path = "+action.request.getContextPath()) ; -// action.log.info("pathinfo = "+action.request.getPathInfo()) ; -// action.log.info("servlet path = "+action.request.getServletPath()) ; - // if /name - // request.getServletPath() otherwise it's null - // if /* - // request.getPathInfo() ; otherwise it's null. - - // PathInfo is after the servlet name. - String x1 = action.request.getServletPath() ; - String x2 = action.request.getPathInfo() ; - - String pathInfo = action.request.getPathInfo() ; - if ( pathInfo == null || pathInfo.isEmpty() || pathInfo.equals("/") ) - // Includes calling as a container. - return null ; - String name = pathInfo ; - // pathInfo starts with a "/" - int idx = pathInfo.lastIndexOf('/') ; - if ( idx > 0 ) - name = name.substring(idx) ; - // Returns "/name" - return name ; - } - - @SuppressWarnings("unused") // ServletException - protected void doPatch(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, "HTTP PATCH not supported"); - } - - private void printRequest(HttpAction action) { - String url = ActionLib.wholeRequestURL(action.request) ; - String method = action.request.getMethod() ; - - log.info(format("[%d] %s %s", action.id, method, url)) ; - if ( action.verbose ) { - Enumeration en = action.request.getHeaderNames() ; - for (; en.hasMoreElements();) { - String h = en.nextElement() ; - Enumeration vals = action.request.getHeaders(h) ; - if ( !vals.hasMoreElements() ) - log.info(format("[%d] ", action.id, h)) ; - else { - for (; vals.hasMoreElements();) - log.info(format("[%d] %-20s %s", action.id, h, vals.nextElement())) ; - } - } - } - } - - private void initResponse(HttpServletRequest request, HttpServletResponse response) { - setCommonHeaders(response) ; - String method = request.getMethod() ; - // All GET and HEAD operations are sensitive to conneg so ... - if ( HttpNames.METHOD_GET.equalsIgnoreCase(method) || HttpNames.METHOD_HEAD.equalsIgnoreCase(method) ) - setVaryHeader(response) ; - } - - private void printResponse(HttpAction action) { - long time = action.getTime() ; - - HttpServletResponseTracker response = action.response ; - if ( action.verbose ) { - if ( action.contentType != null ) - log.info(format("[%d] %-20s %s", action.id, HttpNames.hContentType, action.contentType)) ; - if ( action.contentLength != -1 ) - log.info(format("[%d] %-20s %d", action.id, HttpNames.hContentLengh, action.contentLength)) ; - for (Map.Entry e : action.headers.entrySet()) - log.info(format("[%d] %-20s %s", action.id, e.getKey(), e.getValue())) ; - } - - String timeStr = fmtMillis(time) ; - - if ( action.message == null ) - log.info(String.format("[%d] %d %s (%s) ", action.id, action.statusCode, - HttpSC.getMessage(action.statusCode), timeStr)) ; - else - log.info(String.format("[%d] %d %s (%s) ", action.id, action.statusCode, action.message, timeStr)) ; - - // See also HttpAction.finishRequest - request logging happens there. - } - - /** - *

Given a time point, return the time as a milli second string if it is less than 1000, - * otherwise return a seconds string.

- *

It appends a 'ms' suffix when using milli seconds, - * and s for seconds.

- *

For instance:

- *
    - *
  • 10 emits 10 ms
  • - *
  • 999 emits 999 ms
  • - *
  • 1000 emits 1.000 s
  • - *
  • 10000 emits 10.000 s
  • - *
- * @param time the time in milliseconds - * @return the time as a display string - */ - - private static String fmtMillis(long time) { - // Millis only? seconds only? - if ( time < 1000 ) - return String.format("%,d ms", time) ; - return String.format("%,.3f s", time / 1000.0) ; - } -} http://git-wip-us.apache.org/repos/asf/jena/blob/470ee4d7/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/ActionErrorException.java ---------------------------------------------------------------------- diff --git a/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/ActionErrorException.java b/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/ActionErrorException.java deleted file mode 100644 index c87cfe8..0000000 --- a/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/ActionErrorException.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.jena.fuseki.servlets; - -public class ActionErrorException extends RuntimeException -{ - public final Throwable exception ; - public final String message ; - public final int rc ; - public ActionErrorException(Throwable ex, String message, int rc) - { - this.exception = ex ; - this.message = message ; - this.rc = rc ; - } -} http://git-wip-us.apache.org/repos/asf/jena/blob/470ee4d7/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/ActionLib.java ---------------------------------------------------------------------- diff --git a/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/ActionLib.java b/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/ActionLib.java deleted file mode 100644 index 182b46e..0000000 --- a/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/ActionLib.java +++ /dev/null @@ -1,180 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.jena.fuseki.servlets; - -import javax.servlet.http.HttpServletRequest ; - -import org.apache.jena.atlas.web.AcceptList ; -import org.apache.jena.atlas.web.MediaType ; -import org.apache.jena.fuseki.DEF ; -import org.apache.jena.fuseki.conneg.ConNeg ; -import org.apache.jena.fuseki.server.DataAccessPoint ; -import org.apache.jena.fuseki.server.DataAccessPointRegistry ; - -/** Operations related to servlets */ - -public class ActionLib { - /** - * A possible implementation for {@link ActionSPARQL#mapRequestToDataset} - * that assumes the form /dataset/service. - * @param action the request - * @return the dataset - */ public static String mapRequestToDataset(HttpAction action) { - String uri = action.getActionURI() ; - return mapActionRequestToDataset(uri) ; - } - - /** Map request to uri in the registry. - * A possible implementation for mapRequestToDataset(String) - * that assumes the form /dataset/service - * Returning null means no mapping found. - * The URI must be the action URI (no contact path) - */ - - public static String mapActionRequestToDataset(String uri) { - // Chop off trailing part - the service selector - // e.g. /dataset/sparql => /dataset - int i = uri.lastIndexOf('/') ; - if ( i == -1 ) - return null ; - if ( i == 0 ) - { - // started with '/' - leave. - return uri ; - } - - return uri.substring(0, i) ; - } - - /** Calculate the operation , given action and data access point */ - public static String mapRequestToOperation(HttpAction action, DataAccessPoint dsRef) { - if ( dsRef == null ) - return "" ; - String uri = action.getActionURI() ; - String name = dsRef.getName(); - if ( name.length() >= uri.length() ) - return "" ; - return uri.substring(name.length()+1) ; // Skip the separating "/" - - } - - /** Implementation of mapRequestToDataset(String) that looks for - * the longest match in the registry. - * This includes use in direct naming GSP. - */ - public static String mapRequestToDatasetLongest$(String uri) - { - if ( uri == null ) - return null ; - - // This covers local, using the URI as a direct name for - // a graph, not just using the indirect ?graph= or ?default - // forms. - - String ds = null ; - for ( String ds2 : DataAccessPointRegistry.get().keys() ) { - if ( ! uri.startsWith(ds2) ) - continue ; - - if ( ds == null ) - { - ds = ds2 ; - continue ; - } - if ( ds.length() < ds2.length() ) - { - ds = ds2 ; - continue ; - } - } - return ds ; - } - - /** Calculate the fill URL including query string - * for the HTTP request. This may be quite long. - * @param request HttpServletRequest - * @return String The full URL, including query string. - */ - public static String wholeRequestURL(HttpServletRequest request) { - StringBuffer sb = request.getRequestURL() ; - String queryString = request.getQueryString() ; - if ( queryString != null ) { - sb.append("?") ; - sb.append(queryString) ; - } - return sb.toString() ; - } - - /* - * The context path can be: - * "" for the root context - * "/APP" for named contexts - * so: - * "/dataset/server" becomes "/dataset/server" - * "/APP/dataset/server" becomes "/dataset/server" - */ - public static String removeContextPath(HttpAction action) { - - return actionURI(action.request) ; - } - - public static String actionURI(HttpServletRequest request) { -// Log.info(this, "URI = '"+request.getRequestURI()) ; -// Log.info(this, "Context path = '"+request.getContextPath()+"'") ; -// Log.info(this, "Servlet path = '"+request.getServletPath()+"'") ; -// ServletContext cxt = this.getServletContext() ; -// Log.info(this, "ServletContext path = '"+cxt.getContextPath()+"'") ; - - String contextPath = request.getServletContext().getContextPath() ; - String uri = request.getRequestURI() ; - if ( contextPath == null ) - return uri ; - if ( contextPath.isEmpty()) - return uri ; - String x = uri ; - if ( uri.startsWith(contextPath) ) - x = uri.substring(contextPath.length()) ; - //log.info("uriWithoutContextPath: uri = "+uri+" contextPath="+contextPath+ "--> x="+x) ; - return x ; - } - - /** Negotiate the content-type and set the response headers */ - public static MediaType contentNegotation(HttpAction action, AcceptList myPrefs, - MediaType defaultMediaType) { - MediaType mt = ConNeg.chooseContentType(action.request, myPrefs, defaultMediaType) ; - if ( mt == null ) - return null ; - if ( mt.getContentType() != null ) - action.response.setContentType(mt.getContentType()) ; - if ( mt.getCharset() != null ) - action.response.setCharacterEncoding(mt.getCharset()) ; - return mt ; - } - - /** Negotiate the content-type for an RDF triples syntax and set the response headers */ - public static MediaType contentNegotationRDF(HttpAction action) { - return contentNegotation(action, DEF.rdfOffer, DEF.acceptRDFXML) ; - } - - /** Negotiate the content-type for an RDF quads syntax and set the response headers */ - public static MediaType contentNegotationQuads(HttpAction action) { - return contentNegotation(action, DEF.quadsOffer, DEF.acceptNQuads) ; - } -} - http://git-wip-us.apache.org/repos/asf/jena/blob/470ee4d7/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/ActionREST.java ---------------------------------------------------------------------- diff --git a/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/ActionREST.java b/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/ActionREST.java deleted file mode 100644 index e2c7e4a..0000000 --- a/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/ActionREST.java +++ /dev/null @@ -1,161 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.jena.fuseki.servlets; - -import java.io.IOException ; -import java.util.Locale ; - -import javax.servlet.ServletException ; -import javax.servlet.http.HttpServletRequest ; -import javax.servlet.http.HttpServletResponse ; - -import org.apache.jena.fuseki.server.CounterName ; - -/** Common point for operations that are "REST"ish (use GET/PUT etc as operations). */ -public abstract class ActionREST extends ActionSPARQL -{ - public ActionREST() - { super() ; } - - @Override - protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - // Direct all verbs to our common framework. - doCommon(request, response) ; - } - - @Override - protected void perform(HttpAction action) { - dispatch(action) ; - } - - private void dispatch(HttpAction action) { - HttpServletRequest req = action.request ; - HttpServletResponse resp = action.response ; - String method = req.getMethod().toUpperCase(Locale.ROOT) ; - - if (method.equals(METHOD_GET)) - doGet$(action); - else if (method.equals(METHOD_HEAD)) - doHead$(action); - else if (method.equals(METHOD_POST)) - doPost$(action); - else if (method.equals(METHOD_PATCH)) - doPatch$(action) ; - else if (method.equals(METHOD_OPTIONS)) - doOptions$(action) ; - else if (method.equals(METHOD_TRACE)) - //doTrace(action) ; - ServletOps.errorMethodNotAllowed("TRACE") ; - else if (method.equals(METHOD_PUT)) - doPut$(action) ; - else if (method.equals(METHOD_DELETE)) - doDelete$(action) ; - else - ServletOps.errorNotImplemented("Unknown method: "+method) ; - } - - // Counter wrappers - - // XXX Out of date - we now add HTTP counters to all endpoints. - - private final void doGet$(HttpAction action) { - incCounter(action.getEndpoint(), CounterName.HTTPget) ; - try { - doGet(action) ; - incCounter(action.getEndpoint(), CounterName.HTTPgetGood) ; - } catch ( ActionErrorException ex) { - incCounter(action.getEndpoint(), CounterName.HTTPGetBad) ; - throw ex ; - } - } - - private final void doHead$(HttpAction action) { - incCounter(action.getEndpoint(), CounterName.HTTPhead) ; - try { - doHead(action) ; - incCounter(action.getEndpoint(), CounterName.HTTPheadGood) ; - } catch ( ActionErrorException ex) { - incCounter(action.getEndpoint(), CounterName.HTTPheadBad) ; - throw ex ; - } - } - - private final void doPost$(HttpAction action) { - incCounter(action.getEndpoint(), CounterName.HTTPpost) ; - try { - doPost(action) ; - incCounter(action.getEndpoint(), CounterName.HTTPpostGood) ; - } catch ( ActionErrorException ex) { - incCounter(action.getEndpoint(), CounterName.HTTPpostBad) ; - throw ex ; - } - } - - private final void doPatch$(HttpAction action) { - incCounter(action.getEndpoint(), CounterName.HTTPpatch) ; - try { - doPatch(action) ; - incCounter(action.getEndpoint(), CounterName.HTTPpatchGood) ; - } catch ( ActionErrorException ex) { - incCounter(action.getEndpoint(), CounterName.HTTPpatchBad) ; - throw ex ; - } - } - - private final void doDelete$(HttpAction action) { - incCounter(action.getEndpoint(), CounterName.HTTPdelete) ; - try { - doDelete(action) ; - incCounter(action.getEndpoint(), CounterName.HTTPdeleteGood) ; - } catch ( ActionErrorException ex) { - incCounter(action.getEndpoint(), CounterName.HTTPdeleteBad) ; - throw ex ; - } - } - - private final void doPut$(HttpAction action) { - incCounter(action.getEndpoint(), CounterName.HTTPput) ; - try { - doPut(action) ; - incCounter(action.getEndpoint(), CounterName.HTTPputGood) ; - } catch ( ActionErrorException ex) { - incCounter(action.getEndpoint(), CounterName.HTTPputBad) ; - throw ex ; - } - } - - private final void doOptions$(HttpAction action) { - incCounter(action.getEndpoint(), CounterName.HTTPoptions) ; - try { - doOptions(action) ; - incCounter(action.getEndpoint(), CounterName.HTTPoptionsGood) ; - } catch ( ActionErrorException ex) { - incCounter(action.getEndpoint(), CounterName.HTTPoptionsBad) ; - throw ex ; - } - } - - protected abstract void doGet(HttpAction action) ; - protected abstract void doHead(HttpAction action) ; - protected abstract void doPost(HttpAction action) ; - protected abstract void doPatch(HttpAction action) ; - protected abstract void doDelete(HttpAction action) ; - protected abstract void doPut(HttpAction action) ; - protected abstract void doOptions(HttpAction action) ; -} http://git-wip-us.apache.org/repos/asf/jena/blob/470ee4d7/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/ActionSPARQL.java ---------------------------------------------------------------------- diff --git a/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/ActionSPARQL.java b/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/ActionSPARQL.java deleted file mode 100644 index d26bc55..0000000 --- a/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/ActionSPARQL.java +++ /dev/null @@ -1,207 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.jena.fuseki.servlets; - -import static org.apache.jena.fuseki.server.CounterName.Requests ; -import static org.apache.jena.fuseki.server.CounterName.RequestsBad ; -import static org.apache.jena.fuseki.server.CounterName.RequestsGood ; - -import java.io.InputStream ; - -import org.apache.jena.atlas.RuntimeIOException ; -import org.apache.jena.fuseki.Fuseki ; -import org.apache.jena.fuseki.server.* ; -import org.apache.jena.riot.Lang ; -import org.apache.jena.riot.RDFDataMgr ; -import org.apache.jena.riot.ReaderRIOT ; -import org.apache.jena.riot.RiotException ; -import org.apache.jena.riot.system.ErrorHandler ; -import org.apache.jena.riot.system.ErrorHandlerFactory ; -import org.apache.jena.riot.system.StreamRDF ; - -import com.hp.hpl.jena.query.QueryCancelledException ; - -/** SPARQL request lifecycle */ -public abstract class ActionSPARQL extends ActionBase -{ - protected ActionSPARQL() { super(Fuseki.actionLog) ; } - - protected abstract void validate(HttpAction action) ; - protected abstract void perform(HttpAction action) ; - - /** - * Executes common tasks, including mapping the request to the right dataset, setting the dataset into the HTTP - * action, and retrieving the service for the dataset requested. Finally, it calls the - * {@link #executeAction(HttpAction)} method, which executes the HTTP Action life cycle. - * @param action HTTP Action - */ - @Override - protected void execCommonWorker(HttpAction action) { - DataAccessPoint dataAccessPoint ; - DataService dSrv ; - - String datasetUri = mapRequestToDataset(action) ; - if ( datasetUri != null ) { - dataAccessPoint = DataAccessPointRegistry.get().get(datasetUri) ; - if ( dataAccessPoint == null ) { - ServletOps.errorNotFound("No dataset for URI: "+datasetUri) ; - return ; - } - //dataAccessPoint. - dSrv = dataAccessPoint.getDataService() ; - if ( ! dSrv.isAcceptingRequests() ) { - ServletOps.errorNotFound("Dataset not active: "+datasetUri) ; - return ; - } - } else { - dataAccessPoint = null ; - dSrv = DataService.serviceOnlyDataService() ; - } - - String operationName = mapRequestToOperation(action, dataAccessPoint) ; - action.setRequest(dataAccessPoint, dSrv) ; - - //operationName = "" - - Endpoint op = dSrv.getOperation(operationName) ; - action.setEndpoint(op, operationName); - executeAction(action) ; - } - - /** Execute a SPARQL request. Statistics have not been adjusted at this point. - * - * @param action - */ - protected void executeAction(HttpAction action) { - executeLifecycle(action) ; - } - - /** - * Standard execution lifecycle for a SPARQL Request. - *
    - *
  • {@link #startRequest(HttpAction)}
  • - *
  • initial statistics,
  • - *
  • {@link #validate(HttpAction)} request,
  • - *
  • {@link #perform(HttpAction)} request,
  • - *
  • completion/error statistics,
  • - *
  • {@link #finishRequest(HttpAction)} - *
- * - * @param action - */ - // This is the service request lifecycle. - final - protected void executeLifecycle(HttpAction action) { - startRequest(action) ; - // And also HTTP counter - CounterSet csService = action.getDataService().getCounters() ; - CounterSet csOperation = action.getEndpoint().getCounters() ; - - incCounter(csService, Requests) ; - incCounter(csOperation, Requests) ; - try { - // Either exit this via "bad request" on validation - // or in execution in perform. - try { - validate(action) ; - } catch (ActionErrorException ex) { - incCounter(csOperation, RequestsBad) ; - incCounter(csService, RequestsBad) ; - throw ex ; - } - - try { - perform(action) ; - // Success - incCounter(csOperation, RequestsGood) ; - incCounter(csService, RequestsGood) ; - } catch (ActionErrorException | QueryCancelledException | RuntimeIOException ex) { - incCounter(csOperation, RequestsBad) ; - incCounter(csService, RequestsBad) ; - throw ex ; - } - } finally { - finishRequest(action) ; - } - } - - /** - * Map request {@link HttpAction} to uri in the registry. - * A return of ull means no mapping done (passthrough). - * @param uri the URI - * @return the dataset - */ - protected String mapRequestToDataset(HttpAction action) { - return ActionLib.mapRequestToDataset(action) ; - } - - /** - * Map request to uri in the registry. null means no mapping done - * (passthrough). - */ - protected String mapRequestToOperation(HttpAction action, DataAccessPoint dataAccessPoint) { - return ActionLib.mapRequestToOperation(action, dataAccessPoint) ; - } - - /** Increment counter */ - protected static void incCounter(Counters counters, CounterName name) { - if ( counters == null ) return ; - incCounter(counters.getCounters(), name) ; - } - - /** Decrement counter */ - protected static void decCounter(Counters counters, CounterName name) { - if ( counters == null ) return ; - decCounter(counters.getCounters(), name) ; - } - - protected static void incCounter(CounterSet counters, CounterName name) { - if ( counters == null ) - return ; - try { - if ( counters.contains(name) ) - counters.inc(name) ; - } catch (Exception ex) { - Fuseki.serverLog.warn("Exception on counter inc", ex) ; - } - } - - protected static void decCounter(CounterSet counters, CounterName name) { - if ( counters == null ) - return ; - try { - if ( counters.contains(name) ) - counters.dec(name) ; - } catch (Exception ex) { - Fuseki.serverLog.warn("Exception on counter dec", ex) ; - } - } - - public static void parse(HttpAction action, StreamRDF dest, InputStream input, Lang lang, String base) { - try { - ReaderRIOT r = RDFDataMgr.createReader(lang) ; - if ( r == null ) - ServletOps.errorBadRequest("No parser for language '"+lang.getName()+"'") ; - ErrorHandler errorHandler = ErrorHandlerFactory.errorHandlerStd(action.log); - r.setErrorHandler(errorHandler); - r.read(input, base, null, dest, null) ; - } - catch (RiotException ex) { ServletOps.errorBadRequest("Parse error: "+ex.getMessage()) ; } - } -} http://git-wip-us.apache.org/repos/asf/jena/blob/470ee4d7/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/ConcurrencyPolicyMRSW.java ---------------------------------------------------------------------- diff --git a/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/ConcurrencyPolicyMRSW.java b/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/ConcurrencyPolicyMRSW.java deleted file mode 100644 index 1f86539..0000000 --- a/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/ConcurrencyPolicyMRSW.java +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.jena.fuseki.servlets; - -import java.util.ConcurrentModificationException ; -import java.util.concurrent.atomic.AtomicLong ; - -import org.apache.jena.fuseki.Fuseki ; -import org.slf4j.Logger ; - -public final class ConcurrencyPolicyMRSW -{ - static private Logger log = Fuseki.actionLog ; //org.slf4j.LoggerFactory.getLogger(ConcurrencyPolicyMRSW.class) ; - static private final boolean logging = false ; //log.isDebugEnabled() ; - - // This is a simplified version of ConcurrencyPolicyMRSW from TDB. - private final AtomicLong readCounter = new AtomicLong(0) ; - private final AtomicLong writeCounter = new AtomicLong(0) ; - static private final AtomicLong policyCounter = new AtomicLong(0) ; - - public ConcurrencyPolicyMRSW() - { policyCounter.incrementAndGet() ; } - - // Loggin -inside the operation. - - //@Override - public void startRead() - { - readCounter.getAndIncrement() ; - log() ; - checkConcurrency() ; - } - - //@Override - public void finishRead() - { - log() ; - readCounter.decrementAndGet() ; - checkConcurrency() ; - } - - //@Override - public void startUpdate() - { - writeCounter.getAndIncrement() ; - log() ; - checkConcurrency() ; - } - - //@Override - public void finishUpdate() - { - log() ; - writeCounter.decrementAndGet() ; - checkConcurrency() ; - } - - private synchronized void checkConcurrency() - { - long R = readCounter.get() ; - long W = writeCounter.get() ; - long id = policyCounter.get(); - if ( R > 0 && W > 0 ) - policyError(id, R, W) ; - if ( W > 1 ) - policyError(id, R, W) ; - } - - private void log() - { - if ( ! logging ) - return ; - long R , W , id ; - synchronized(this) - { - R = readCounter.get() ; - W = writeCounter.get() ; - id = policyCounter.get(); - } - log.info(format(id, R, W)) ; - } - - private static void policyError(long id, long R, long W) - { - policyError(format(id, R, W)) ; - } - - private static void policyError(String message) - { - throw new ConcurrentModificationException(message) ; - } - - private static String format(long id, long R, long W) - { - return String.format("(lock=%d) Reader = %d, Writer = %d", id, R, W) ; - } -} http://git-wip-us.apache.org/repos/asf/jena/blob/470ee4d7/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/FusekiFilter.java ---------------------------------------------------------------------- diff --git a/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/FusekiFilter.java b/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/FusekiFilter.java deleted file mode 100644 index 7a79cd3..0000000 --- a/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/FusekiFilter.java +++ /dev/null @@ -1,87 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.jena.fuseki.servlets; - -import java.io.IOException ; - -import javax.servlet.* ; -import javax.servlet.http.HttpServletRequest ; -import javax.servlet.http.HttpServletResponse ; - -import org.apache.jena.fuseki.Fuseki ; -import org.apache.jena.fuseki.server.DataAccessPointRegistry ; -import org.slf4j.Logger ; - -/** Look at all requests and see if they match a registered dataset name; - * if they do, pass down to the uber servlet, which can dispatch any request - * for any service. - */ -public class FusekiFilter implements Filter { - private static Logger log = Fuseki.serverLog ; - private static SPARQL_UberServlet überServlet = new SPARQL_UberServlet.AccessByConfig() ; - - @Override - public void init(FilterConfig filterConfig) throws ServletException { -// log.info("Filter: ["+Utils.className(this)+"] ServletContextName = "+filterConfig.getServletContext().getServletContextName()) ; -// log.info("Filter: ["+Utils.className(this)+"] ContextPath = "+filterConfig.getServletContext().getContextPath()) ; - } - - private static final boolean LogFilter = false ; // Development debugging (can be excessive!) - - @Override - public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) - throws IOException, ServletException { - try { - HttpServletRequest req = (HttpServletRequest)request ; - HttpServletResponse resp = (HttpServletResponse)response ; - - // Handle context path - String uri = ActionLib.actionURI(req) ; - String datasetUri = ActionLib.mapActionRequestToDataset(uri) ; - - // is it a long running operation? - // (this could be a separate filter) - - if ( LogFilter ) { - log.info("Filter: Request URI = "+req.getRequestURI()) ; - log.info("Filter: Action URI = "+uri) ; - log.info("Filter: Dataset URI = "+datasetUri) ; - } - - if ( datasetUri != null ) { - if ( DataAccessPointRegistry.get().isRegistered(datasetUri) ) { - if ( LogFilter ) - log.info("Filter: dispatch") ; - überServlet.doCommon(req, resp) ; - return ; - } - } - } catch (Exception ex) {} - - if ( LogFilter ) - log.info("Filter: pass to chain") ; - // Not found - continue. - chain.doFilter(request, response); - } - - @Override - public void destroy() {} - -} - http://git-wip-us.apache.org/repos/asf/jena/blob/470ee4d7/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/HttpAction.java ---------------------------------------------------------------------- diff --git a/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/HttpAction.java b/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/HttpAction.java deleted file mode 100644 index 245ed0f..0000000 --- a/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/HttpAction.java +++ /dev/null @@ -1,387 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.jena.fuseki.servlets; - -import static com.hp.hpl.jena.query.ReadWrite.READ ; -import static com.hp.hpl.jena.query.ReadWrite.WRITE ; - -import java.util.HashMap ; -import java.util.Map ; - -import javax.servlet.http.HttpServletRequest ; -import javax.servlet.http.HttpServletResponse ; - -import org.apache.jena.atlas.logging.Log ; -import org.apache.jena.fuseki.Fuseki ; -import org.apache.jena.fuseki.FusekiException ; -import org.apache.jena.fuseki.server.* ; -import org.slf4j.Logger ; - -import com.hp.hpl.jena.query.ReadWrite ; -import com.hp.hpl.jena.sparql.SystemARQ ; -import com.hp.hpl.jena.sparql.core.DatasetGraph ; -import com.hp.hpl.jena.sparql.core.DatasetGraphWithLock ; -import com.hp.hpl.jena.sparql.core.DatasetGraphWrapper ; -import com.hp.hpl.jena.sparql.core.Transactional ; - -/** - * HTTP action that represents the user request lifecycle. Its state is handled in the - * {@link ActionSPARQL#executeAction(HttpAction)} method. - */ -public class HttpAction -{ - public final long id ; - public final boolean verbose ; - public final Logger log ; - - // ---- - // Worth subclassing? Given this is allocated in the general lifecycle - // it would mean there are downcasts to the specific type. - - // -- Valid only for operational actions (e.g. SPARQL). - - public String endpointName = null ; // Endpoint name srv was found under - public Endpoint endpoint = null ; - private Transactional transactional = null ; - private boolean isTransactional = false ; - private DatasetGraph activeDSG = null ; // Set when inside begin/end. - private ReadWrite activeMode = null ; // Set when inside begin/end. - - // -- Valid only for administration actions. - - // -- Shared items (but exact meaning may differ) - /** Handle to dataset+services being acted on (maybe null) */ - private DataAccessPoint dataAccessPoint = null ; - private DataService dataService = null ; - private String datasetName = null ; // Dataset URI used (e.g. registry) - private DatasetGraph dsg = null ; - - // ---- - - private boolean startTimeIsSet = false ; - private boolean finishTimeIsSet = false ; - - private long startTime = -2 ; - private long finishTime = -2 ; - - // Outcome. - public int statusCode = -1 ; - public String message = null ; - public int contentLength = -1 ; - public String contentType = null ; - - // Cleared to archive: - public Map headers = new HashMap<>() ; - public HttpServletRequest request; - public HttpServletResponseTracker response ; - private final String actionURI ; - private final String contextPath ; - - /** - * Creates a new HTTP Action, using the HTTP request and response, and a given ID. - * - * @param id given ID - * @param log Logger for this action - * @param request HTTP request - * @param response HTTP response - * @param verbose verbose flag - */ - public HttpAction(long id, Logger log, HttpServletRequest request, HttpServletResponse response, boolean verbose) { - this.id = id ; - this.log = log ; - this.request = request ; - this.response = new HttpServletResponseTracker(this, response) ; - // Should this be set when setDataset is called from the dataset context? - // Currently server-wide, e.g. from the command line. - this.verbose = verbose ; - this.contextPath = request.getServletContext().getContextPath() ; - this.actionURI = ActionLib.actionURI(request) ; - } - - /** Initialization after action creation during lifecycle setup. - *

Sets the action dataset. Setting will replace any existing {@link DataAccessPoint} and {@link DataService}, - * as the {@link DatasetGraph} of the current HTTP Action.

- * - *

Once it has updated its members, the HTTP Action will change its transactional state and - * {@link Transactional} instance according to its base dataset graph.

- * - * @param dataAccessPoint {@link DataAccessPoint} - * @param dService {@link DataService} - * @see Transactional - */ - - public void setRequest(DataAccessPoint dataAccessPoint, DataService dService) { - this.dataAccessPoint = dataAccessPoint ; - if ( dataAccessPoint != null ) - this.datasetName = dataAccessPoint.getName() ; - - if ( this.dataService != null ) - throw new FusekiException("Redefinition of DatasetRef in the request action") ; - - this.dataService = dService ; - if ( dService == null || dService.getDataset() == null ) - // Null does not happens for service requests, (it does for admin requests - call setControlRequest) - throw new FusekiException("Null DataService in the request action") ; - - this.dsg = dService.getDataset() ; - DatasetGraph basedsg = unwrap(dsg) ; - - if ( isTransactional(basedsg) && isTransactional(dsg) ) { - // Use transactional if it looks safe - abort is necessary. - transactional = (Transactional)dsg ; - isTransactional = true ; - } else { - // Unsure if safesetControlRef - transactional = new DatasetGraphWithLock(dsg) ; - // No real abort. - isTransactional = false ; - } - } - - public void setControlRequest(DataAccessPoint dataAccessPoint, String datasetUri) { - this.dataAccessPoint = dataAccessPoint ; - this.dataService = null ; - this.datasetName = datasetUri ; - } - - /** - * Returns true iff the given {@link DatasetGraph} is an instance of {@link Transactional}, - * false otherwise. - * - * @param dsg a {@link DatasetGraph} - * @return true iff the given {@link DatasetGraph} is an instance of {@link Transactional}, - * false otherwise - */ - private static boolean isTransactional(DatasetGraph dsg) { - return (dsg instanceof Transactional) ; - } - - /** - * A {@link DatasetGraph} may contain other wrapped DatasetGraph's. This method will return - * the first instance (including the argument to this method) that is not an instance of - * {@link DatasetGraphWrapper}. - * - * @param dsg a {@link DatasetGraph} - * @return the first found {@link DatasetGraph} that is not an instance of {@link DatasetGraphWrapper} - */ - private static DatasetGraph unwrap(DatasetGraph dsg) { - while (dsg instanceof DatasetGraphWrapper) { - dsg = ((DatasetGraphWrapper)dsg).getWrapped() ; - } - return dsg ; - } - - /** This is the requestURI with the context path removed. - * It should be used internally for dispatch. - */ - public String getActionURI() { - return actionURI ; - } - - /** Get the context path. - */ - public String getContextPath() { - return contextPath ; - } - - - /** Set the endpoint and endpoint name that this is an action for. - * @param srvRef {@link Endpoint} - * @param endpointName - */ - public void setEndpoint(Endpoint srvRef, String endpointName) { - this.endpoint = srvRef ; - this.endpointName = endpointName ; - } - - /** Get the endpoint for the action (may be null) . */ - public Endpoint getEndpoint() { - return endpoint ; - } - - /** - * Returns whether or not the underlying DatasetGraph is fully transactional (supports rollback) - */ - public boolean isTransactional() { - return isTransactional ; - } - - public void beginRead() { - activeMode = READ ; - transactional.begin(READ) ; - activeDSG = dsg ; - dataService.startTxn(READ) ; - } - - public void endRead() { - dataService.finishTxn(READ) ; - activeMode = null ; - transactional.end() ; - activeDSG = null ; - } - - public void beginWrite() { - transactional.begin(WRITE) ; - activeMode = WRITE ; - activeDSG = dsg ; - dataService.startTxn(WRITE) ; - } - - public void commit() { - transactional.commit() ; - activeDSG = null ; - } - - public void abort() { - try { transactional.abort() ; } - catch (Exception ex) { - // Some datasets claim to be transactional but - // don't provide a real abort. We tried to avoid - // them earlier but even if they sneek through, - // we try to continue server operation. - Log.warn(this, "Exception during abort (operation attempts to continue): "+ex.getMessage()) ; - } - activeDSG = null ; - } - - public void endWrite() { - dataService.finishTxn(WRITE) ; - activeMode = null ; - - if ( transactional.isInTransaction() ) { - Log.warn(this, "Transaction still active in endWriter - no commit or abort seen (forced abort)") ; - try { - transactional.abort() ; - } catch (RuntimeException ex) { - Log.warn(this, "Exception in forced abort (trying to continue)", ex) ; - } - } - transactional.end() ; - activeDSG = null ; - } - - public final void startRequest() - { - if ( dataAccessPoint != null ) - dataAccessPoint.startRequest(this) ; - } - - public final void finishRequest() { - if ( dataAccessPoint != null ) - dataAccessPoint.finishRequest(this) ; - // Standard logging goes here. - if ( Fuseki.requestLog != null && Fuseki.requestLog.isInfoEnabled() ) { - String s = RequestLog.combinedNCSA(this) ; - Fuseki.requestLog.info(s); - } - } - - /** If inside the transaction for the action, return the active {@link DatasetGraph}, - * otherwise return null. - * @return Current active {@link DatasetGraph} - */ - public final DatasetGraph getActiveDSG() { - return activeDSG ; - } - - public final DataAccessPoint getDataAccessPoint() { - return dataAccessPoint; - } - -// public void setDataAccessPoint(DataAccessPoint dataAccessPoint) { -// this.dataAccessPoint = dataAccessPoint; -// } - - public final DataService getDataService() { - return dataService; - } - -// public final void setDataService(DataService dataService) { -// this.dataService = dataService; -// } - - public final String getDatasetName() { - return datasetName; - } - -// public void setDatasetName(String datasetName) { -// this.datasetName = datasetName; -// } - - /** Reduce to a size that can be kept around for sometime. - * Release resources like datasets that may be closed, reset etc. - */ - public void minimize() { - this.request = null ; - this.response = null ; - this.dsg = null ; - this.dataService = null ; - this.activeDSG = null ; - this.endpoint = null ; - } - - public void setStartTime() { - if ( startTimeIsSet ) - Log.warn(this, "Start time reset") ; - startTimeIsSet = true ; - this.startTime = System.nanoTime() ; - } - - /** Start time, in system nanos */ - public long getStartTime() { - if ( ! startTimeIsSet ) - Log.warn(this, "Start time is not set") ; - return startTime ; - } - - /** Start time, in system nanos */ - public long getFinishTime() { - if ( ! finishTimeIsSet ) - Log.warn(this, "Finish time is not set") ; - return finishTime ; - } - - public void setFinishTime() { - if ( finishTimeIsSet ) - Log.warn(this, "Finish time reset") ; - finishTimeIsSet = true ; - this.finishTime = System.nanoTime() ; - } - - public HttpServletRequest getRequest() { return request ; } - - public HttpServletResponseTracker getResponse() { return response ; } - - /** Return the recorded time taken in milliseconds. - * {@link #setStartTime} and {@link #setFinishTime} - * must have been called. - */ - public long getTime() - { - if ( ! startTimeIsSet ) - Log.warn(this, "Start time not set") ; - if ( ! finishTimeIsSet ) - Log.warn(this, "Finish time not set") ; - return (finishTime-startTime)/(1000*1000) ; - } - - public void sync() { - SystemARQ.sync(dsg) ; - } -} http://git-wip-us.apache.org/repos/asf/jena/blob/470ee4d7/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/HttpServletResponseTracker.java ---------------------------------------------------------------------- diff --git a/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/HttpServletResponseTracker.java b/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/HttpServletResponseTracker.java deleted file mode 100644 index c39e728..0000000 --- a/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/HttpServletResponseTracker.java +++ /dev/null @@ -1,140 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.jena.fuseki.servlets; - -import java.io.IOException ; - -import javax.servlet.http.HttpServletResponse ; -import javax.servlet.http.HttpServletResponseWrapper ; - -import org.apache.jena.atlas.logging.Log ; - -/** Intercepting wrapper so we can track the response settings for logging purposes */ - -public class HttpServletResponseTracker extends HttpServletResponseWrapper -{ - private final HttpAction action ; - - public HttpServletResponseTracker(HttpAction action, HttpServletResponse response) - { - super(response) ; - this.action = action ; - } - - @Override - public void sendError(int sc, String msg) throws IOException - { - action.statusCode = sc ; - action.message = msg ; - super.sendError(sc, msg) ; - } - - @Override - public void sendError(int sc) throws IOException - { - action.statusCode = sc ; - action.message = null ; - super.sendError(sc) ; - } - - @Override - public void setHeader(String name, String value) - { - super.setHeader(name, value) ; - action.headers.put(name, value) ; - } - - @Override - public void addHeader(String name, String value) - { - Log.warn(this, "Unexpected addHeader - not recorded in log") ; - super.addHeader(name, value) ; - } - @Override - public void setStatus(int sc) - { - action.statusCode = sc ; - action.message = null ; - super.setStatus(sc) ; - } - - @Override - @Deprecated - public void setStatus(int sc, String sm) - { - action.statusCode = sc ; - action.message = sm ; - super.setStatus(sc, sm) ; - } - - @Override - public void setContentLength(int len) - { - action.contentLength = len ; - super.setContentLength(len) ; - } - - @Override - public void setContentType(String type) - { - action.contentType = type ; - super.setContentType(type) ; - } - - // From HttpServletResponse -// public void addCookie(Cookie cookie) {} -// public boolean containsHeader(String name) {} -// public String encodeURL(String url) { } -// public String encodeRedirectURL(String url) {} -// public String encodeUrl(String url) {} -// public String encodeRedirectUrl(String url) {} -// public void sendError(int sc, String msg) throws IOException -// public void sendError(int sc) throws IOException -// public void sendRedirect(String location) throws IOException {} -// public void setDateHeader(String name, long date) {} -// public void addDateHeader(String name, long date) {} -// public void setHeader(String name, String value) -// public void addHeader(String name, String value) -// public void setIntHeader(String name, int value) {} -// public void addIntHeader(String name, int value) {} -// public void setStatus(int sc) -// public void setStatus(int sc, String sm) -// public void sendRedirect(String location) throws IOException {} -// public void setDateHeader(String name, long date) {} -// public void addDateHeader(String name, long date) {} - - // From ServletResponse. -// public ServletResponse getResponse() {} -// public void setResponse(ServletResponse response) {} -// public void setCharacterEncoding(String charset) {} -// public String getCharacterEncoding() {} -// public ServletOutputStream getOutputStream() throws IOException {} -// public PrintWriter getWriter() throws IOException {} -// public void setContentLength(int len) {} -// public void setContentType(String type) {} -// public String getContentType() { -// public void setBufferSize(int size) {} -// public int getBufferSize() {} -// public void flushBuffer() throws IOException {} -// public boolean isCommitted() {} -// public void reset() {} -// public void resetBuffer() {} -// public void setLocale(Locale loc) {} -// public Locale getLocale() {} -} http://git-wip-us.apache.org/repos/asf/jena/blob/470ee4d7/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/NullOutputStream.java ---------------------------------------------------------------------- diff --git a/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/NullOutputStream.java b/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/NullOutputStream.java deleted file mode 100644 index 63e6562..0000000 --- a/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/NullOutputStream.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.jena.fuseki.servlets; - -import java.io.* ; - -/** -* Code needed to implement an OutputStream that does nothing. -*/ - - -public class NullOutputStream extends /*Filter*/OutputStream -{ - public NullOutputStream() - { - } - - // The OutputStream operations - @Override - public void close() { /* .close() ;*/ } - @Override - public void flush() { /* .flush() ;*/ } - - // Need to implement this one. - @Override - public void write(int b) { /* .write(b) ;*/ } - @Override - public void write(byte b[]) { /* this.write(b, 0, b.length) ; */} - - // Good to implement this one. - @Override - public void write(byte[] b, int off, int len) - { - // Work function - } - -} http://git-wip-us.apache.org/repos/asf/jena/blob/470ee4d7/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/REST_Quads.java ---------------------------------------------------------------------- diff --git a/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/REST_Quads.java b/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/REST_Quads.java deleted file mode 100644 index 578447e..0000000 --- a/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/REST_Quads.java +++ /dev/null @@ -1,68 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.jena.fuseki.servlets ; - - -/** - * Servlet for operations directly on a dataset - REST(ish) behaviour on the - * dataset URI. - */ - -public abstract class REST_Quads extends SPARQL_GSP { - // Not supported: GSP direct naming. - - public REST_Quads() { - super() ; - } - - @Override - protected void validate(HttpAction action) { - // Check in the operations itself. - } - - @Override - protected void doOptions(HttpAction action) { - ServletOps.errorMethodNotAllowed("OPTIONS") ; - } - - @Override - protected void doHead(HttpAction action) { - ServletOps.errorMethodNotAllowed("HEAD") ; - } - - @Override - protected void doPost(HttpAction action) { - ServletOps.errorMethodNotAllowed("POST") ; - } - - @Override - protected void doPut(HttpAction action) { - ServletOps.errorMethodNotAllowed("PUT") ; - } - - @Override - protected void doDelete(HttpAction action) { - ServletOps.errorMethodNotAllowed("DELETE") ; - } - - @Override - protected void doPatch(HttpAction action) { - ServletOps.errorMethodNotAllowed("PATCH") ; - } -}