Compare commits

..

2 commits

Author SHA1 Message Date
a9f02635f1
Remove Eclipse-specific markers (comments)
All checks were successful
Build / build (push) Successful in 33s
2025-04-09 23:09:23 +02:00
fe81de07e3
Fix compiler warnings with and without Copilot 2025-04-09 22:57:42 +02:00
41 changed files with 549 additions and 605 deletions

22
.gitignore vendored
View file

@ -1,7 +1,5 @@
# Generally ignore hidden files
.*
# Manage some Codium configuration
.vscode/*
!.vscode
!.vscode/extensions.json
@ -9,22 +7,22 @@
!.vscode/settings.json
!.vscode/tasks.json
# Ignore files created during build or run
build
/apps
/bin
/backups
build
/db
/docs
/extras
/lib
/licenses
/log
# Ignore files managed in src/dist
/*.properties
/apps
/db
/extras
/launcher.jar
/static
# Manage Gradle configuration
/*.properties
!/gradle.properties
/launcher.jar
/passwd
/start.*

View file

@ -147,11 +147,9 @@ installDist {
dependsOn build
}
def processSource = tasks.register('processSource', Sync) {
tasks.register('processSource', Sync) {
def gitOutput = new ByteArrayOutputStream()
outputs.dir "${project.buildDir}/src"
exec {
commandLine 'git', 'rev-parse', '--short', 'HEAD'
standardOutput = gitOutput
@ -166,11 +164,9 @@ def processSource = tasks.register('processSource', Sync) {
.replaceAll('__builddate__', new Date().format("d MMM yyyy"))
.replaceAll('__commithash__', gitOutput.toString().trim())
.replaceAll('__version__', version)
} into outputs.files.singleFile
} into "${project.buildDir}/src"
}
tasks.compileJava.source = processSource.map { it.outputs.files }
tasks.register('update') {
dependsOn installDist

View file

@ -41,8 +41,8 @@ public class Commandline {
ClassLoader loader = Main.createClassLoader(installDir);
// get the main server class
Class clazz = loader.loadClass("helma.main.CommandlineRunner");
Class[] cargs = new Class[]{args.getClass()};
Class<?> clazz = loader.loadClass("helma.main.CommandlineRunner");
Class<?>[] cargs = new Class<?>[]{args.getClass()};
Method main = clazz.getMethod("main", cargs);
Object[] nargs = new Object[]{args};

View file

@ -35,10 +35,10 @@ import java.util.ArrayList;
* be able to set up class and install paths.
*/
public class Main {
private Class serverClass;
private Class<?> serverClass;
private Object server;
private static final Class[] EMPTY_CLASS_ARRAY = new Class[0];
private static final Class<?>[] EMPTY_CLASS_ARRAY = new Class<?>[0];
private static final Object[] EMPTY_OBJECT_ARRAY = new Object[0];
/**
@ -60,7 +60,7 @@ public class Main {
ClassLoader loader = createClassLoader(installDir);
// get the main server class
serverClass = loader.loadClass("helma.main.Server");
Class[] cargs = new Class[]{args.getClass()};
Class<?>[] cargs = new Class<?>[]{args.getClass()};
Method loadServer = serverClass.getMethod("loadServer", cargs);
Object[] nargs = new Object[]{args};
// and invoke the static loadServer(String[]) method
@ -111,17 +111,17 @@ public class Main {
}
}
static void addJars(ArrayList jarlist, File dir) throws MalformedURLException {
static void addJars(ArrayList<URL> jarlist, File dir) throws MalformedURLException {
File[] files = dir.listFiles(new FilenameFilter() {
public boolean accept(File dir, String name) {
String n = name.toLowerCase();
return n.endsWith(".jar") || n.endsWith(".zip"); //$NON-NLS-1$//$NON-NLS-2$
return n.endsWith(".jar") || n.endsWith(".zip");
}
});
if (files != null) {
for (int i = 0; i < files.length; i++) {
jarlist.add(new URL("file:" + files[i].getAbsolutePath())); //$NON-NLS-1$
jarlist.add(new URL("file:" + files[i].getAbsolutePath()));
}
}
}
@ -143,13 +143,13 @@ public class Main {
// set up the class path
File libdir = new File(installDir, "lib");
ArrayList jarlist = new ArrayList();
ArrayList<URL> jarlist = new ArrayList<>();
// add all jar files from the lib directory
addJars(jarlist, libdir);
// add all jar files from the lib/ext directory
addJars(jarlist, new File(libdir, "ext")); //$NON-NLS-1$
addJars(jarlist, new File(libdir, "ext"));
URL[] urls = new URL[jarlist.size()];
@ -199,7 +199,7 @@ public class Main {
// try to get Helma installation directory
if (installDir == null) {
URL launcherUrl = ClassLoader.getSystemClassLoader()
.getResource("helma/main/launcher/Main.class"); //$NON-NLS-1$
.getResource("helma/main/launcher/Main.class");
// this is a JAR URL of the form
// jar:<url>!/{entry}

0
src/dist/extras/deploy.sh vendored Executable file → Normal file
View file

View file

@ -59,7 +59,7 @@ public abstract class HelmaExtension {
* with pairs of varname and ESObjects. This method should be <b>synchronized</b>, if it
* performs any other self-initialization outside the scripting environment.
*/
public abstract HashMap initScripting(Application app, ScriptingEngine engine)
public abstract HashMap<String, Object> initScripting(Application app, ScriptingEngine engine)
throws ConfigurationException;
/**

View file

@ -42,7 +42,7 @@ public class DemoExtension extends HelmaExtension {
public void init(Server server) throws ConfigurationException {
try {
// just a demo with the server class itself (which is always there, obviously)
Class check = Class.forName("helma.main.Server");
Class.forName("helma.main.Server");
} catch (ClassNotFoundException e) {
throw new ConfigurationException("helma-library not present in classpath. make sure helma.jar is included. get it from http://www.helma.org/");
}
@ -87,7 +87,7 @@ public class DemoExtension extends HelmaExtension {
*
* @throws ConfigurationException ...
*/
public HashMap initScripting(Application app, ScriptingEngine engine)
public HashMap<String, Object> initScripting(Application app, ScriptingEngine engine)
throws ConfigurationException {
if (!(engine instanceof RhinoEngine)) {
throw new ConfigurationException("scripting engine " + engine.toString() +
@ -98,7 +98,7 @@ public class DemoExtension extends HelmaExtension {
engine.toString());
// initialize prototypes and global vars here
HashMap globals = new HashMap();
HashMap<String, Object> globals = new HashMap<>();
globals.put("demo", Server.getServer());

View file

@ -603,11 +603,11 @@ public class RequestTrans implements Serializable {
StringTokenizer tok;
if (auth.startsWith("Basic ")) { //$NON-NLS-1$
if (auth.startsWith("Basic ")) {
tok = new StringTokenizer(new String(Base64.decodeBase64(auth.substring(6))),
":"); //$NON-NLS-1$
":");
} else {
tok = new StringTokenizer(new String(Base64.decodeBase64(auth)), ":"); //$NON-NLS-1$
tok = new StringTokenizer(new String(Base64.decodeBase64(auth)), ":");
}
try {

View file

@ -714,7 +714,7 @@ public final class ResponseTrans extends Writer implements Serializable {
// if (contentType != null)
// digest.update (contentType.getBytes());
byte[] b = this.digest.digest(this.response);
this.etag = "\"" + new String(Base64.encodeBase64(b)) + "\""; //$NON-NLS-1$ //$NON-NLS-2$
this.etag = "\"" + new String(Base64.encodeBase64(b)) + "\"";
// only set response to 304 not modified if no cookies were set
if (reqtrans.hasETag(etag) && countCookies() == 0) {
response = new byte[0];

View file

@ -47,7 +47,7 @@ public final class Application implements Runnable {
private String name;
// application sources
ArrayList repositories;
ArrayList<Repository> repositories;
// properties and db-properties
ResourceProperties props;
@ -96,15 +96,15 @@ public final class Application implements Runnable {
/**
* Collections for evaluator thread pooling
*/
protected Stack freeThreads;
protected Vector allThreads;
protected Stack<RequestEvaluator> freeThreads;
protected Vector<RequestEvaluator> allThreads;
boolean running = false;
boolean debug;
long starttime;
Hashtable dbSources;
Hashtable<String, DbSource> dbSources;
// map of app modules reflected at app.modules
Map modules;
Map<String, Object> modules;
// internal worker thread for scheduler, session cleanup etc.
Thread worker;
@ -113,10 +113,10 @@ public final class Application implements Runnable {
ThreadGroup threadgroup;
// threadlocal variable for the current RequestEvaluator
ThreadLocal currentEvaluator = new ThreadLocal();
ThreadLocal<RequestEvaluator> currentEvaluator = new ThreadLocal<>();
// Map of requesttrans -> active requestevaluators
Hashtable activeRequests;
Hashtable<RequestTrans, RequestEvaluator> activeRequests;
String logDir;
@ -165,15 +165,15 @@ public final class Application implements Runnable {
private long lastPropertyRead = -1L;
// the set of prototype/function pairs which are allowed to be called via XML-RPC
private HashSet xmlrpcAccess;
private HashSet<String> xmlrpcAccess;
// the name under which this app serves XML-RPC requests. Defaults to the app name
private String xmlrpcHandlerName;
// the list of currently active cron jobs
Hashtable activeCronJobs = null;
Hashtable<String, CronRunner> activeCronJobs = null;
// the list of custom cron jobs
Hashtable customCronJobs = null;
Hashtable<String, CronJob> customCronJobs = null;
private ResourceComparator resourceComparator;
private Resource currentCodeResource;
@ -230,7 +230,7 @@ public final class Application implements Runnable {
this.caseInsensitive = "true".equalsIgnoreCase(server.getAppsProperties(name).getProperty("caseInsensitive"));
this.repositories = new ArrayList();
this.repositories = new ArrayList<>();
this.repositories.addAll(Arrays.asList(repositories));
resourceComparator = new ResourceComparator(this);
@ -304,7 +304,7 @@ public final class Application implements Runnable {
updateProperties();
dbSources = new Hashtable();
dbSources = new Hashtable<>();
modules = new SystemMap();
}
@ -366,7 +366,9 @@ public final class Application implements Runnable {
private void initInternal()
throws DatabaseException, IllegalAccessException,
InstantiationException, ClassNotFoundException {
InstantiationException, ClassNotFoundException,
IllegalArgumentException, InvocationTargetException,
NoSuchMethodException, SecurityException {
running = true;
// create and init type mananger
typemgr = new TypeManager(Application.this, ignoreDirs);
@ -381,7 +383,7 @@ public final class Application implements Runnable {
}
if (Server.getServer() != null) {
Vector extensions = Server.getServer().getExtensions();
Vector<HelmaExtension> extensions = Server.getServer().getExtensions();
for (int i = 0; i < extensions.size(); i++) {
HelmaExtension ext = (HelmaExtension) extensions.get(i);
@ -396,12 +398,12 @@ public final class Application implements Runnable {
}
// create and init evaluator/thread lists
freeThreads = new Stack();
allThreads = new Vector();
freeThreads = new Stack<>();
allThreads = new Vector<>();
activeRequests = new Hashtable();
activeCronJobs = new Hashtable();
customCronJobs = new Hashtable();
activeRequests = new Hashtable<>();
activeCronJobs = new Hashtable<>();
customCronJobs = new Hashtable<>();
// create the skin manager
skinmgr = new SkinManager(Application.this);
@ -442,7 +444,13 @@ public final class Application implements Runnable {
// create and init session manager
String sessionMgrImpl = props.getProperty("sessionManagerImpl",
"helma.framework.core.SessionManager");
sessionMgr = (SessionManager) Class.forName(sessionMgrImpl).newInstance();
try {
sessionMgr = (SessionManager) Class.forName(sessionMgrImpl)
.getDeclaredConstructor()
.newInstance();
} catch (NoSuchMethodException | InvocationTargetException e) {
throw new RuntimeException("Error initializing session manager", e);
}
logEvent("Using session manager class " + sessionMgrImpl);
sessionMgr.init(Application.this);
@ -879,7 +887,7 @@ public final class Application implements Runnable {
} else {
String rootClass = classMapping.getProperty("root");
Class c = typemgr.getClassLoader().loadClass(rootClass);
rootObject = c.newInstance();
rootObject = c.getDeclaredConstructor().newInstance();
}
} catch (Exception e) {
throw new RuntimeException("Error creating root object: " +

View file

@ -100,7 +100,7 @@ public final class RequestEvaluator implements Runnable {
app.setCurrentRequestEvaluator(this);
Class clazz = app.getClassLoader().loadClass(engineClassName);
scriptingEngine = (ScriptingEngine) clazz.newInstance();
scriptingEngine = (ScriptingEngine) clazz.getDeclaredConstructor().newInstance();
scriptingEngine.init(app, this);
} catch (Exception x) {
Throwable t = x;

View file

@ -72,7 +72,7 @@ public abstract class ImageGenerator {
"The imageGenerator class cannot be found: " + className);
}
try {
generator = (ImageGenerator)generatorClass.newInstance();
generator = (ImageGenerator) generatorClass.getDeclaredConstructor().newInstance();
} catch (Exception e) {
throw new RuntimeException(
"The ImageGenerator instance could not be created: "

File diff suppressed because it is too large Load diff

View file

@ -24,6 +24,7 @@ import java.io.*;
import java.util.*;
import javax.imageio.*;
import javax.imageio.spi.*;
import javax.imageio.stream.ImageOutputStream;
public class GIFImageWriterSpi extends ImageWriterSpi {
@ -35,7 +36,7 @@ public class GIFImageWriterSpi extends ImageWriterSpi {
new String[] {"gif", "GIF"},
new String[] {"image/gif", "image/x-gif"},
"helma.image.imageio.gif.GIFImageWriter",
STANDARD_OUTPUT_TYPE,
new Class<?>[] {ImageOutputStream.class},
null,
false, null, null, null, null,
false, null, null, null, null

View file

@ -36,9 +36,9 @@ import helma.util.StringUtils;
* This class is responsible for starting and stopping Helma applications.
*/
public class ApplicationManager implements XmlRpcHandler {
private Hashtable descriptors;
private Hashtable applications;
private Hashtable xmlrpcHandlers;
private Hashtable<String, AppDescriptor> descriptors;
private Hashtable<String, Application> applications;
private Hashtable<String, Application> xmlrpcHandlers;
private ResourceProperties props;
private Server server;
private long lastModified;
@ -54,9 +54,9 @@ public class ApplicationManager implements XmlRpcHandler {
public ApplicationManager(ResourceProperties props, Server server) {
this.props = props;
this.server = server;
this.descriptors = new Hashtable();
this.applications = new Hashtable();
this.xmlrpcHandlers = new Hashtable();
this.descriptors = new Hashtable<String, AppDescriptor>();
this.applications = new Hashtable<String, Application>();
this.xmlrpcHandlers = new Hashtable<String, Application>();
this.lastModified = 0;
this.jetty = server.jetty;
}
@ -68,10 +68,10 @@ public class ApplicationManager implements XmlRpcHandler {
protected void checkForChanges() {
if (this.props.lastModified() > this.lastModified && this.server.getApplicationsOption() == null) {
try {
for (Enumeration e = this.props.keys(); e.hasMoreElements();) {
for (Enumeration<?> e = this.props.keys(); e.hasMoreElements();) {
String appName = (String) e.nextElement();
if ((appName.indexOf(".") == -1) && //$NON-NLS-1$
if ((appName.indexOf(".") == -1) &&
(this.applications.get(appName) == null)) {
AppDescriptor appDesc = new AppDescriptor(appName);
appDesc.start();
@ -80,7 +80,7 @@ public class ApplicationManager implements XmlRpcHandler {
}
// then stop deleted ones
for (Enumeration e = this.descriptors.elements(); e.hasMoreElements();) {
for (Enumeration<AppDescriptor> e = this.descriptors.elements(); e.hasMoreElements();) {
AppDescriptor appDesc = (AppDescriptor) e.nextElement();
// check if application has been removed and should be stopped
@ -146,10 +146,10 @@ public class ApplicationManager implements XmlRpcHandler {
desc.start();
}
} else {
for (Enumeration e = this.props.keys(); e.hasMoreElements();) {
for (Enumeration<?> e = this.props.keys(); e.hasMoreElements();) {
String appName = (String) e.nextElement();
if (appName.indexOf(".") == -1) { //$NON-NLS-1$
if (appName.indexOf(".") == -1) {
String appValue = this.props.getProperty(appName);
if (appValue != null && appValue.length() > 0) {
@ -162,7 +162,7 @@ public class ApplicationManager implements XmlRpcHandler {
}
}
for (Enumeration e = this.descriptors.elements(); e.hasMoreElements();) {
for (Enumeration<AppDescriptor> e = this.descriptors.elements(); e.hasMoreElements();) {
AppDescriptor appDesc = (AppDescriptor) e.nextElement();
appDesc.bind();
}
@ -178,7 +178,7 @@ public class ApplicationManager implements XmlRpcHandler {
* Stop all running applications.
*/
public void stopAll() {
for (Enumeration en = this.descriptors.elements(); en.hasMoreElements();) {
for (Enumeration<AppDescriptor> en = this.descriptors.elements(); en.hasMoreElements();) {
try {
AppDescriptor appDesc = (AppDescriptor) en.nextElement();
@ -206,9 +206,9 @@ public class ApplicationManager implements XmlRpcHandler {
/**
* Implements org.apache.xmlrpc.XmlRpcHandler.execute()
*/
public Object execute(String method, Vector params)
public Object execute(String method, @SuppressWarnings("rawtypes") Vector params)
throws Exception {
int dot = method.indexOf("."); //$NON-NLS-1$
int dot = method.indexOf(".");
if (dot == -1) {
throw new Exception("Method name \"" + method +
@ -224,7 +224,7 @@ public class ApplicationManager implements XmlRpcHandler {
Application app = (Application) this.xmlrpcHandlers.get(handler);
if (app == null) {
app = (Application) this.xmlrpcHandlers.get("*"); //$NON-NLS-1$
app = (Application) this.xmlrpcHandlers.get("*");
// use the original method name, the handler is resolved within the app.
method2 = method;
}
@ -239,32 +239,32 @@ public class ApplicationManager implements XmlRpcHandler {
private String getMountpoint(String mountpoint) {
mountpoint = mountpoint.trim();
if ("".equals(mountpoint)) { //$NON-NLS-1$
return "/"; //$NON-NLS-1$
} else if (!mountpoint.startsWith("/")) { //$NON-NLS-1$
return "/" + mountpoint; //$NON-NLS-1$
if ("".equals(mountpoint)) {
return "/";
} else if (!mountpoint.startsWith("/")) {
return "/" + mountpoint;
}
return mountpoint;
}
private String joinMountpoint(String prefix, String suffix) {
if (prefix.endsWith("/") || suffix.startsWith("/")) { //$NON-NLS-1$//$NON-NLS-2$
if (prefix.endsWith("/") || suffix.startsWith("/")) {
return prefix+suffix;
}
return prefix+"/"+suffix; //$NON-NLS-1$
return prefix+"/"+suffix;
}
private String getPathPattern(String mountpoint) {
if (!mountpoint.startsWith("/")) { //$NON-NLS-1$
mountpoint = "/"+mountpoint; //$NON-NLS-1$
if (!mountpoint.startsWith("/")) {
mountpoint = "/"+mountpoint;
}
if ("/".equals(mountpoint)) { //$NON-NLS-1$
return "/"; //$NON-NLS-1$
if ("/".equals(mountpoint)) {
return "/";
}
if (mountpoint.endsWith("/")) { //$NON-NLS-1$
if (mountpoint.endsWith("/")) {
return mountpoint.substring(0, mountpoint.length()-1);
}
@ -335,56 +335,56 @@ public class ApplicationManager implements XmlRpcHandler {
AppDescriptor(String name) {
ResourceProperties conf = ApplicationManager.this.props.getSubProperties(name + '.');
this.appName = name;
this.mountpoint = getMountpoint(conf.getProperty("mountpoint", this.appName)); //$NON-NLS-1$
this.mountpoint = getMountpoint(conf.getProperty("mountpoint", this.appName));
this.pathPattern = getPathPattern(this.mountpoint);
this.staticDir = conf.getProperty("static"); //$NON-NLS-1$
this.staticMountpoint = getPathPattern(conf.getProperty("staticMountpoint", //$NON-NLS-1$
joinMountpoint(this.mountpoint, "static"))); //$NON-NLS-1$
this.staticIndex = "true".equalsIgnoreCase(conf.getProperty("staticIndex")); //$NON-NLS-1$//$NON-NLS-2$
String home = conf.getProperty("staticHome"); //$NON-NLS-1$
this.staticDir = conf.getProperty("static");
this.staticMountpoint = getPathPattern(conf.getProperty("staticMountpoint",
joinMountpoint(this.mountpoint, "static")));
this.staticIndex = "true".equalsIgnoreCase(conf.getProperty("staticIndex"));
String home = conf.getProperty("staticHome");
if (home == null) {
this.staticHome = new String[] {"index.html", "index.htm"}; //$NON-NLS-1$ //$NON-NLS-2$
this.staticHome = new String[] {"index.html", "index.htm"};
} else {
this.staticHome = StringUtils.split(home, ","); //$NON-NLS-1$
this.staticHome = StringUtils.split(home, ",");
}
this.protectedStaticDir = conf.getProperty("protectedStatic"); //$NON-NLS-1$
this.protectedStaticDir = conf.getProperty("protectedStatic");
this.cookieDomain = conf.getProperty("cookieDomain"); //$NON-NLS-1$
this.sessionCookieName = conf.getProperty("sessionCookieName"); //$NON-NLS-1$
this.protectedSessionCookie = conf.getProperty("protectedSessionCookie"); //$NON-NLS-1$
this.uploadLimit = conf.getProperty("uploadLimit"); //$NON-NLS-1$
this.uploadSoftfail = conf.getProperty("uploadSoftfail"); //$NON-NLS-1$
this.debug = conf.getProperty("debug"); //$NON-NLS-1$
String appDirName = conf.getProperty("appdir"); //$NON-NLS-1$
this.cookieDomain = conf.getProperty("cookieDomain");
this.sessionCookieName = conf.getProperty("sessionCookieName");
this.protectedSessionCookie = conf.getProperty("protectedSessionCookie");
this.uploadLimit = conf.getProperty("uploadLimit");
this.uploadSoftfail = conf.getProperty("uploadSoftfail");
this.debug = conf.getProperty("debug");
String appDirName = conf.getProperty("appdir");
this.appDir = (appDirName == null) ? null : getAbsoluteFile(appDirName);
String dbDirName = conf.getProperty("dbdir"); //$NON-NLS-1$
String dbDirName = conf.getProperty("dbdir");
this.dbDir = (dbDirName == null) ? null : getAbsoluteFile(dbDirName);
this.servletClassName = conf.getProperty("servletClass"); //$NON-NLS-1$
this.servletClassName = conf.getProperty("servletClass");
// got ignore dirs
this.ignoreDirs = conf.getProperty("ignore"); //$NON-NLS-1$
this.ignoreDirs = conf.getProperty("ignore");
// read and configure app repositories
ArrayList repositoryList = new ArrayList();
Class[] parameters = { String.class };
ArrayList<Repository> repositoryList = new ArrayList<>();
Class<?>[] parameters = { String.class };
for (int i = 0; true; i++) {
String repositoryArgs = conf.getProperty("repository." + i); //$NON-NLS-1$
String repositoryArgs = conf.getProperty("repository." + i);
if (repositoryArgs != null) {
// lookup repository implementation
String repositoryImpl = conf.getProperty("repository." + i + //$NON-NLS-1$
".implementation"); //$NON-NLS-1$
String repositoryImpl = conf.getProperty("repository." + i +
".implementation");
if (repositoryImpl == null) {
// implementation not set manually, have to guess it
if (repositoryArgs.endsWith(".zip")) { //$NON-NLS-1$
if (repositoryArgs.endsWith(".zip")) {
repositoryArgs = findResource(repositoryArgs);
repositoryImpl = "helma.framework.repository.ZipRepository"; //$NON-NLS-1$
} else if (repositoryArgs.endsWith(".js")) { //$NON-NLS-1$
repositoryImpl = "helma.framework.repository.ZipRepository";
} else if (repositoryArgs.endsWith(".js")) {
repositoryArgs = findResource(repositoryArgs);
repositoryImpl = "helma.framework.repository.SingleFileRepository"; //$NON-NLS-1$
repositoryImpl = "helma.framework.repository.SingleFileRepository";
} else {
repositoryArgs = findResource(repositoryArgs);
repositoryImpl = "helma.framework.repository.FileRepository"; //$NON-NLS-1$
repositoryImpl = "helma.framework.repository.FileRepository";
}
}
@ -491,41 +491,42 @@ public class ApplicationManager implements XmlRpcHandler {
rhandler.setResourceBase(staticContent.getPath());
rhandler.setWelcomeFiles(staticHome);
staticContext = ApplicationManager.this.context.addContext(staticMountpoint, ""); //$NON-NLS-1$
staticContext = new ContextHandler(staticMountpoint);
ApplicationManager.this.context.addHandler(staticContext);
staticContext.setHandler(rhandler);
staticContext.start();
}
appContext = new ServletContextHandler(context, pathPattern, true, true);
Class servletClass = servletClassName == null ?
EmbeddedServletClient.class : Class.forName(servletClassName);
Class<? extends EmbeddedServletClient> servletClass = servletClassName == null ?
EmbeddedServletClient.class : Class.forName(servletClassName).asSubclass(EmbeddedServletClient.class);
ServletHolder holder = new ServletHolder(servletClass);
holder.setInitParameter("application", appName);
appContext.addServlet(holder, "/*");
if (this.cookieDomain != null) {
holder.setInitParameter("cookieDomain", this.cookieDomain); //$NON-NLS-1$
holder.setInitParameter("cookieDomain", this.cookieDomain);
}
if (this.sessionCookieName != null) {
holder.setInitParameter("sessionCookieName", this.sessionCookieName); //$NON-NLS-1$
holder.setInitParameter("sessionCookieName", this.sessionCookieName);
}
if (this.protectedSessionCookie != null) {
holder.setInitParameter("protectedSessionCookie", this.protectedSessionCookie); //$NON-NLS-1$
holder.setInitParameter("protectedSessionCookie", this.protectedSessionCookie);
}
if (this.uploadLimit != null) {
holder.setInitParameter("uploadLimit", this.uploadLimit); //$NON-NLS-1$
holder.setInitParameter("uploadLimit", this.uploadLimit);
}
if (this.uploadSoftfail != null) {
holder.setInitParameter("uploadSoftfail", this.uploadSoftfail); //$NON-NLS-1$
holder.setInitParameter("uploadSoftfail", this.uploadSoftfail);
}
if (this.debug != null) {
holder.setInitParameter("debug", this.debug); //$NON-NLS-1$
holder.setInitParameter("debug", this.debug);
}
if (protectedStaticDir != null) {
@ -583,7 +584,7 @@ public class ApplicationManager implements XmlRpcHandler {
@Override
public String toString() {
return "[AppDescriptor "+this.app+"]"; //$NON-NLS-1$ //$NON-NLS-2$
return "[AppDescriptor "+this.app+"]";
}
}
}

View file

@ -41,10 +41,10 @@ public class CommandlineRunner {
ServerConfig config = new ServerConfig();
String commandStr = null;
Vector funcArgs = new Vector();
Vector<String> funcArgs = new Vector<>();
// get possible environment setting for helma home
if (System.getProperty("helma.home")!=null) {
if (System.getProperty("helma.home") != null) {
config.setHomeDir(new File(System.getProperty("helma.home")));
}

View file

@ -30,11 +30,13 @@ import java.util.HashSet;
* a utility method <code>getApplication</code> that can be used to determine
* the name of the application trying to execute the action in question, if any.
*/
@Deprecated
@SuppressWarnings("removal")
public class HelmaSecurityManager extends SecurityManager {
// The set of actions forbidden to application code.
// We are pretty permissive, forbidding only System.exit()
// and setting the security manager.
private final static HashSet forbidden = new HashSet();
private final static HashSet<String> forbidden = new HashSet<>();
static {
forbidden.add("exitVM");
@ -49,7 +51,7 @@ public class HelmaSecurityManager extends SecurityManager {
public void checkPermission(Permission p) {
if (p instanceof RuntimePermission) {
if (forbidden.contains(p.getName())) {
Class[] classes = getClassContext();
Class<?>[] classes = getClassContext();
for (int i = 0; i < classes.length; i++) {
if (classes[i].getClassLoader() instanceof AppClassLoader) {
@ -98,7 +100,7 @@ public class HelmaSecurityManager extends SecurityManager {
* @param status ...
*/
public void checkExit(int status) {
Class[] classes = getClassContext();
Class<?>[] classes = getClassContext();
for (int i = 0; i < classes.length; i++) {
if (classes[i].getClassLoader() instanceof AppClassLoader) {
@ -287,7 +289,7 @@ public class HelmaSecurityManager extends SecurityManager {
* @param clazz ...
* @param which ...
*/
public void checkMemberAccess(Class clazz, int which) {
public void checkMemberAccess(Class<?> clazz, int which) {
}
/**
@ -304,7 +306,7 @@ public class HelmaSecurityManager extends SecurityManager {
* does not belong to any application.
*/
protected String getApplication() {
Class[] classes = getClassContext();
Class<?>[] classes = getClassContext();
for (int i = 0; i < classes.length; i++) {
if (classes[i].getClassLoader() instanceof AppClassLoader) {

View file

@ -16,9 +16,6 @@
package helma.main;
import helma.util.*;
import org.apache.commons.logging.LogFactory;
/**
* ShutdownHook that shuts down all running Helma applications on exit.
*/

View file

@ -21,6 +21,7 @@ import org.eclipse.jetty.server.Connector;
import org.eclipse.jetty.server.HttpConfiguration;
import org.eclipse.jetty.server.HttpConnectionFactory;
import org.eclipse.jetty.server.ServerConnector;
import org.eclipse.jetty.util.resource.Resource;
import org.eclipse.jetty.xml.XmlConfiguration;
import java.net.URL;
@ -47,7 +48,7 @@ public class JettyServer {
http = new org.eclipse.jetty.server.Server();
try {
XmlConfiguration config = new XmlConfiguration(url);
XmlConfiguration config = new XmlConfiguration(Resource.newResource(url));
config.configure(http);
} catch (IOException e) {
@ -73,7 +74,7 @@ public class JettyServer {
connector.setHost(webPort.getAddress().getHostAddress());
connector.setPort(webPort.getPort());
connector.setIdleTimeout(30000);
connector.setSoLingerTime(-1);
// Removed deprecated method setSoLingerTime
connector.setAcceptorPriorityDelta(0);
connector.setAcceptQueueSize(0);

View file

@ -29,8 +29,6 @@ import java.io.*;
import java.util.*;
import java.net.*;
import helma.util.ResourceProperties;
/**
* Helma server main class.
*/
@ -67,14 +65,14 @@ public class Server implements Runnable {
// explicitly listed hosts.
public boolean paranoid;
private ApplicationManager appManager;
private Vector extensions;
private Vector<HelmaExtension> extensions;
private Thread mainThread;
// configuration
ServerConfig config;
// map of server-wide database sources
Hashtable dbSources;
Hashtable<String, DbSource> dbSources;
// the embedded web server
// protected Serve websrv;
@ -432,10 +430,10 @@ public class Server implements Runnable {
// logger.debug("TimeZone = " +
// TimeZone.getDefault().getDisplayName(Locale.getDefault()));
dbSources = new Hashtable();
dbSources = new Hashtable<String, DbSource>();
// try to load the extensions
extensions = new Vector();
extensions = new Vector<HelmaExtension>();
if (sysProps.getProperty("extensions") != null) {
initExtensions();
}
@ -452,8 +450,8 @@ public class Server implements Runnable {
String extClassName = tok.nextToken().trim();
try {
Class extClass = Class.forName(extClassName);
HelmaExtension ext = (HelmaExtension) extClass.newInstance();
Class<? extends HelmaExtension> extClass = Class.forName(extClassName).asSubclass(HelmaExtension.class);
HelmaExtension ext = (HelmaExtension) extClass.getDeclaredConstructor().newInstance();
ext.init(this);
extensions.add(ext);
logger.info("Loaded: " + extClassName);
@ -572,7 +570,9 @@ public class Server implements Runnable {
String secManClass = sysProps.getProperty("securityManager");
if (secManClass != null) {
@SuppressWarnings("removal")
SecurityManager secMan = (SecurityManager) Class.forName(secManClass)
.getDeclaredConstructor()
.newInstance();
System.setSecurityManager(secMan);
@ -764,7 +764,7 @@ public class Server implements Runnable {
*
* @return ...
*/
public Vector getExtensions() {
public Vector<HelmaExtension> getExtensions() {
return extensions;
}
@ -805,5 +805,3 @@ public class Server implements Runnable {
return new InetSocketAddress(addr, port);
}
}

View file

@ -18,7 +18,6 @@ package helma.objectmodel;
import helma.framework.IPathElement;
import helma.framework.core.Application;
import helma.framework.core.RequestEvaluator;
import helma.objectmodel.db.DbMapping;
import helma.objectmodel.db.Relation;
import helma.objectmodel.db.Node;
@ -65,6 +64,7 @@ public class TransientNode implements INode, Serializable {
this.app=app;
}
@SuppressWarnings("unused")
private TransientNode() {
app=null;
}

View file

@ -22,6 +22,7 @@ import helma.objectmodel.*;
import helma.objectmodel.dom.XmlDatabase;
import java.io.*;
import java.lang.reflect.InvocationTargetException;
import java.math.BigDecimal;
import java.sql.*;
import java.util.*;
@ -59,19 +60,25 @@ public final class NodeManager {
* Initialize the NodeManager for the given dbHome and
* application properties. An embedded database will be
* created in dbHome if one doesn't already exist.
* @throws SecurityException
* @throws NoSuchMethodException
* @throws InvocationTargetException
* @throws IllegalArgumentException
*/
public void init(File dbHome, Properties props)
throws DatabaseException, ClassNotFoundException,
IllegalAccessException, InstantiationException {
IllegalAccessException, InstantiationException,
IllegalArgumentException, InvocationTargetException,
NoSuchMethodException, SecurityException {
String cacheImpl = props.getProperty("cacheimpl", "helma.util.CacheMap");
cache = (ObjectCache) Class.forName(cacheImpl).newInstance();
cache = (ObjectCache) Class.forName(cacheImpl).getDeclaredConstructor().newInstance();
cache.init(app);
String idgenImpl = props.getProperty("idGeneratorImpl");
if (idgenImpl != null) {
idgen = (IDGenerator) Class.forName(idgenImpl).newInstance();
idgen = (IDGenerator) Class.forName(idgenImpl).getDeclaredConstructor().newInstance();
idgen.init(app);
}

View file

@ -37,6 +37,7 @@ public class SubnodeList implements Serializable {
/**
* Hide/disable zero argument constructor for subclasses
*/
@SuppressWarnings("unused")
private SubnodeList() {}
/**

View file

@ -463,8 +463,6 @@ public class Transactor {
node.clearWriteLock();
}
long now = System.currentTimeMillis();
// set last subnode change times in parent nodes
for (Iterator i = parentNodes.iterator(); i.hasNext(); ) {
Node node = (Node) i.next();

View file

@ -48,14 +48,7 @@ public class ScriptingException extends Exception {
*/
private void setScriptStack(Throwable cause) {
if (cause instanceof RhinoException) {
FilenameFilter filter = new FilenameFilter() {
public boolean accept(File dir, String name) {
return name.endsWith(".js") ||
name.endsWith(".hac") ||
name.endsWith(".hsp");
}
};
scriptStack = ((RhinoException) cause).getScriptStackTrace(filter);
scriptStack = ((RhinoException) cause).getScriptStackTrace();
}
}

View file

@ -48,11 +48,11 @@ public class CompiledOrInterpretedModuleScriptProvider extends StrongCachingModu
// unlikely, but possible exception during loading the module script without compilation
Exception exception;
// get the application's optimization level
int optimizationLevel = cx.getOptimizationLevel();
boolean interpretedMode = cx.isInterpretedMode();
try {
// set the optimization level to not compile, but interpret
cx.setOptimizationLevel(-1);
cx.setInterpretedMode(true);
// load the module script with the newly set optimization level
ModuleScript moduleScript = super.getModuleScript(cx, moduleId, moduleUri, baseUri, paths);
// return the module script
@ -62,7 +62,7 @@ public class CompiledOrInterpretedModuleScriptProvider extends StrongCachingModu
exception = e;
} finally {
// re-set the optimization
cx.setOptimizationLevel(optimizationLevel);
cx.setInterpretedMode(interpretedMode);
}
// re-throw the exception catched when trying to load the module script without compilation

View file

@ -149,7 +149,7 @@ public class HopObjectCtor extends FunctionObject {
private static final long serialVersionUID = -8041352998956882647L;
public GetById(Scriptable scope) {
ScriptRuntime.setFunctionProtoAndParent(this, scope);
ScriptRuntime.setFunctionProtoAndParent(this, Context.getCurrentContext(), scope);
}
/**
@ -201,7 +201,7 @@ public class HopObjectCtor extends FunctionObject {
private static final long serialVersionUID = -4046933261468527204L;
public HopCollection(Scriptable scope) {
ScriptRuntime.setFunctionProtoAndParent(this, scope);
ScriptRuntime.setFunctionProtoAndParent(this, Context.getCurrentContext(), scope);
}
public Object call(Context cx, Scriptable scope, Scriptable thisObj, Object[] args) {

View file

@ -67,7 +67,7 @@ import org.mozilla.javascript.*;
* @author A. Sundararajan
* @since 1.6
*/
public final class JSAdapter implements Scriptable, Function {
public final class JSAdapter implements Function {
private JSAdapter(Scriptable obj) {
setAdaptee(obj);
}

View file

@ -19,15 +19,15 @@ public class JSONModuleSource extends ModuleSource {
@Override
public Reader getReader() {
StringBuffer content = new StringBuffer();
content.append("module.exports = "); //$NON-NLS-1$
content.append("module.exports = ");
try {
content.append(IOUtils.toString(this.getUri().toURL().openStream()));
content.append(IOUtils.toString(this.getUri().toURL().openStream(), "UTF-8"));
} catch (IOException e) {
content.append("null"); //$NON-NLS-1$
content.append("null");
}
content.append(";"); //$NON-NLS-1$
content.append(";");
return new StringReader(content.toString());
}

View file

@ -17,7 +17,6 @@
package helma.scripting.rhino;
import helma.framework.core.*;
import helma.framework.ResponseTrans;
import helma.framework.repository.Resource;
import org.mozilla.javascript.*;
import java.lang.reflect.Method;

View file

@ -73,7 +73,7 @@ public class NodeModulesProvider extends UrlModuleSourceProvider {
// check if the file exists and is a file
if (file.exists() && file.isFile()) {
// check if the file is a JSON file
if (file.getAbsolutePath().toLowerCase().endsWith(".json")) { //$NON-NLS-1$
if (file.getAbsolutePath().toLowerCase().endsWith(".json")) {
// return a JSON module source
return new JSONModuleSource(null, file.toURI(), base, validator);
} else {
@ -83,7 +83,7 @@ public class NodeModulesProvider extends UrlModuleSourceProvider {
}
// lets assume the module is a JS file
file = new File(new File(uri).getPath() + ".js"); //$NON-NLS-1$
file = new File(new File(uri).getPath() + ".js");
// check if a file.js exists and is a file
if (file.exists() && file.isFile()) {
// do what would have been done anyways
@ -91,7 +91,7 @@ public class NodeModulesProvider extends UrlModuleSourceProvider {
}
// lets assume the module is a JSON file
file = new File(new File(uri).getPath() + ".json"); //$NON-NLS-1$
file = new File(new File(uri).getPath() + ".json");
// check if a file.json exists and is a file
if (file.exists() && file.isFile()) {
// return a JSON module source
@ -135,17 +135,17 @@ public class NodeModulesProvider extends UrlModuleSourceProvider {
ModuleSource moduleSource;
// lets assume that there is a "package.json" file in the directory
File packageFile = new File(directory, "package.json"); //$NON-NLS-1$
File packageFile = new File(directory, "package.json");
// check if the there is a "package.json" file in the directory
if (packageFile.exists() && packageFile.isFile()) {
// parse the JSON file
JsonObject json = new JsonParser()
.parse(new String(Files.readAllBytes(packageFile.toPath()))).getAsJsonObject();
JsonObject json = JsonParser
.parseString(new String(Files.readAllBytes(packageFile.toPath()))).getAsJsonObject();
// check if the JSON file defines a main JS file
if (json.has("main")) { //$NON-NLS-1$
if (json.has("main")) {
// get the main JS file, removing the filename extension
String main = FilenameUtils.removeExtension(json.get("main").getAsString()); //$NON-NLS-1$
String main = FilenameUtils.removeExtension(json.get("main").getAsString());
// load as file
moduleSource = this.loadAsFile(new File(directory, main).toURI(), base, validator);
@ -158,7 +158,7 @@ public class NodeModulesProvider extends UrlModuleSourceProvider {
}
// load as index
moduleSource = this.loadAsFile(new File(directory, "index").toURI(), base, validator); //$NON-NLS-1$
moduleSource = this.loadAsFile(new File(directory, "index").toURI(), base, validator);
// check if something was loaded
if (moduleSource != null) {
// return the loaded module source

View file

@ -44,7 +44,6 @@ import org.mozilla.javascript.Undefined;
import org.mozilla.javascript.WrapFactory;
import org.mozilla.javascript.Wrapper;
import org.mozilla.javascript.commonjs.module.RequireBuilder;
import org.mozilla.javascript.commonjs.module.provider.StrongCachingModuleScriptProvider;
import org.mozilla.javascript.tools.debugger.ScopeProvider;
import java.io.*;
@ -1233,7 +1232,7 @@ public final class RhinoCore implements ScopeProvider {
protected void onContextCreated(Context cx) {
cx.setWrapFactory(wrapper);
cx.setOptimizationLevel(optLevel);
cx.setInterpretedMode(optLevel < 0);
cx.setInstructionObserverThreshold(10000);
if (Context.isValidLanguageVersion(languageVersion)) {
cx.setLanguageVersion(languageVersion);

View file

@ -49,13 +49,15 @@ class ScriptBeanProxy implements SerializationProxy {
* @return the object represented by this proxy
*/
public Object getObject(RhinoEngine engine) {
Object object = null;
try {
Object object = engine.global.get(name, engine.global);
object = engine.global.get(name, engine.global);
} catch (Exception e) {
System.out.println(name);
}
return engine.global.get(name, engine.global);
return object;
}
}

View file

@ -151,7 +151,9 @@ public class Profiler implements Debugger {
name.substring(prefixLength)
};
formatter.format("%1$7d ms %2$5d ms %3$6d %4$s%n", args);
return formatter.toString();
String result = formatter.toString();
formatter.close();
return result;
}
}
}

View file

@ -17,7 +17,6 @@
package helma.scripting.rhino.debug;
import helma.framework.ResponseTrans;
import helma.util.HtmlEncoder;
import org.mozilla.javascript.*;
import org.mozilla.javascript.debug.*;
import java.util.ArrayList;

View file

@ -25,6 +25,7 @@ import java.util.Enumeration;
import java.util.Vector;
import java.io.IOException;
import java.io.Reader;
import java.lang.reflect.InvocationTargetException;
import java.math.BigDecimal;
import java.sql.*;
@ -62,9 +63,13 @@ public class DatabaseObject {
* Create a new database object based on a driver name, with driver on the classpath
*
* @param driverName The class name of the JDBC driver
* @throws SecurityException
* @throws NoSuchMethodException
* @throws InvocationTargetException
* @throws IllegalArgumentException
*/
DatabaseObject(String driverName) {
DatabaseObject(String driverName) throws IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException {
this.driverName = driverName;
try {
Class driverClass = Class.forName(driverName);
@ -73,7 +78,7 @@ public class DatabaseObject {
// System.err.println("##Bad class " + driverClass);
lastError = new RuntimeException("Class " + driverClass + " is not a JDBC driver");
}
driverClass.newInstance(); // may be needed by some drivers, harmless for others
driverClass.getDeclaredConstructor().newInstance(); // may be needed by some drivers, harmless for others
} catch (ClassNotFoundException e) {
// System.err.println("##Cannot find driver class: " + e);
// e.printStackTrace();
@ -448,51 +453,6 @@ public class DatabaseObject {
return null;
}
/* FIXME: dunno if this method is still used somewhere
public Object getProperty(String propertyName, int hash) {
//System.err.println(" &&& Getting property '" + propertyName + "'");
// Length property is firsy checked
// First return system or or prototype properties
if (propertyName.equals("length")) {
return Integer.valueOf(colNames.size());
} else {
if (resultSet == null) {
lastError = new SQLException("Attempt to access a released result set");
return null;
}
if (!firstRowSeen) {
lastError = new SQLException("Attempt to access data before the first row is read");
return null;
}
try {
int index = -1; // indicates not a valid index value
try {
char c = propertyName.charAt(0);
if ('0' <= c && c <= '9') {
index = Integer.parseInt(propertyName);
}
} catch (NumberFormatException e) {
} catch (StringIndexOutOfBoundsException e) { // for charAt
}
if (index>=0) {
return getProperty(index);
}
Object value = resultSet.getObject(propertyName);
// IServer.getLogger().log("&& @VALUE : " + value);
lastError = null;
return value;
} catch (SQLException e) {
// System.err.println("##Cannot get property '" + propertyName + "' " + e);
// e.printStackTrace();
lastError = e;
}
}
return null;
}
*/
public Object getProperty(int index) {
if (!firstRowSeen) {
lastError = new SQLException("Attempt to access data before the first row is read");

View file

@ -39,7 +39,7 @@ import javax.mail.internet.MimeUtility;
* A JavaScript wrapper around a JavaMail message class to send
* mail via SMTP from Helma
*/
public class MailObject extends ScriptableObject implements Serializable {
public class MailObject extends ScriptableObject {
private static final long serialVersionUID = -4834981850233741039L;

View file

@ -126,7 +126,9 @@ public class XmlObject {
writer.setDatabaseMode(dbmode);
writer.write(node);
writer.flush();
return out.toString("UTF-8");
String result = out.toString("UTF-8");
writer.close();
return result;
}
/**

View file

@ -217,7 +217,7 @@ public abstract class AbstractServletClient extends HttpServlet {
parseParameters(request, reqtrans, encoding);
// read file uploads
List uploads = null;
List<FileItem> uploads = null;
ServletRequestContext reqcx = new ServletRequestContext(request);
if (ServletFileUpload.isMultipartContent(reqcx)) {
@ -517,9 +517,9 @@ public abstract class AbstractServletClient extends HttpServlet {
checksum[i] = (byte) (n);
n >>>= 8;
}
String etag = "\"" + new String(Base64.encodeBase64(checksum)) + "\""; //$NON-NLS-1$//$NON-NLS-2$
res.setHeader("ETag", etag); //$NON-NLS-1$
String etagHeader = req.getHeader("If-None-Match"); //$NON-NLS-1$
String etag = "\"" + new String(Base64.encodeBase64(checksum)) + "\"";
res.setHeader("ETag", etag);
String etagHeader = req.getHeader("If-None-Match");
if (etagHeader != null) {
StringTokenizer st = new StringTokenizer(etagHeader, ", \r\n");
while (st.hasMoreTokens()) {
@ -637,7 +637,7 @@ public abstract class AbstractServletClient extends HttpServlet {
* Put name and value pair in map. When name already exist, add value
* to array of values.
*/
private static void putMapEntry(Map map, String name, String value) {
private static void putMapEntry(Map<String, String[]> map, String name, String value) {
String[] newValues = null;
String[] oldValues = (String[]) map.get(name);
@ -653,9 +653,9 @@ public abstract class AbstractServletClient extends HttpServlet {
map.put(name, newValues);
}
protected List parseUploads(ServletRequestContext reqcx, RequestTrans reqtrans,
final UploadStatus uploadStatus, String encoding)
throws FileUploadException, UnsupportedEncodingException {
protected List<FileItem> parseUploads(ServletRequestContext reqcx, RequestTrans reqtrans,
final UploadStatus uploadStatus, String encoding)
throws FileUploadException, UnsupportedEncodingException {
// handle file upload
DiskFileItemFactory factory = new DiskFileItemFactory();
FileUpload upload = new FileUpload(factory);
@ -672,8 +672,8 @@ public abstract class AbstractServletClient extends HttpServlet {
});
}
List uploads = upload.parseRequest(reqcx);
Iterator it = uploads.iterator();
List<FileItem> uploads = upload.parseRequest(reqcx);
Iterator<FileItem> it = uploads.iterator();
while (it.hasNext()) {
FileItem item = (FileItem) it.next();
@ -705,7 +705,7 @@ public abstract class AbstractServletClient extends HttpServlet {
return;
}
HashMap parameters = new HashMap();
HashMap<String, String[]> parameters = new HashMap<>();
// Parse any query string parameters from the request
if (queryString != null) {
@ -764,7 +764,7 @@ public abstract class AbstractServletClient extends HttpServlet {
*
* @exception UnsupportedEncodingException if the data is malformed
*/
public static void parseParameters(Map map, byte[] data, String encoding, boolean isPost)
public static void parseParameters(Map<String, String[]> map, byte[] data, String encoding, boolean isPost)
throws UnsupportedEncodingException {
if ((data != null) && (data.length > 0)) {
int ix = 0;

View file

@ -16,7 +16,6 @@
package helma.servlet;
import helma.framework.*;
import helma.framework.core.Application;
import helma.main.*;
import javax.servlet.*;

View file

@ -23,7 +23,6 @@ import java.util.StringTokenizer;
import org.apache.commons.codec.digest.DigestUtils;
import helma.framework.repository.Resource;
import helma.framework.repository.Resource;
/**