• Deprecated classes in old beanshell script (5.1.8)

  • He we will discuss about how to make customization and improvement to the OpenKM source code.
He we will discuss about how to make customization and improvement to the OpenKM source code.
Forum rules: Please, before asking something see the documentation wiki or use the search feature of the forum. And remember we don't have a crystal ball or mental readers, so if you post about an issue tell us which OpenKM are you using and also the browser and operating system version. For more info read How to Report Bugs Effectively.
 #30621  by Sascha
 
Hi together,

we had an beanshell script for an older version 5.1.8 that works fine.
Now we have migrated to 6.3.0 and there are errors because of deprecated classes. The first change I did, was to change the class JcrSessionManager through the class DbSessionManager. Now the class Util could not be loaded!?

Maybe some of you have an idea or an answer for this issue. Here is the code and down below the error from the catalina.log Thank you for every answer!
Code: Select all
import java.util.List;
import java.util.Calendar;
import java.util.ArrayList;
import java.util.Map;
import java.util.Comparator;
import java.util.Collections;
import java.net.URLEncoder;

import com.openkm.api.OKMSearch;
import com.openkm.api.OKMAuth;
import com.openkm.dao.bean.QueryParams;
import com.openkm.bean.Document;
import com.openkm.bean.QueryResult;
import com.openkm.frontend.client.util.Util;
import com.openkm.dao.ConfigDAO;
import com.openkm.dao.AuthDAO;
import com.openkm.dao.bean.User;
import com.openkm.util.MailUtils;
//import com.openkm.core.JcrSessionManager;
import com.openkm.util.GWTUtil;


// NEW SINCE 6.2
import com.openkm.module.db.stuff.DbSessionManager;


// ROLE
// INSERT INTO OKM_CONFIG (CFG_KEY, CFG_TYPE, CFG_VALUE) VALUES ('test.report.role', 'string', 'test_reportuser');
class DocumentComparator implements Comparator {
	public int compare(Object arg0, Object arg1) {		
		Document doc0 = (Document) arg0;
		Document doc1 = (Document) arg1;
		String parent0 = Util.getParent(doc0.getPath()).toLowerCase();
		String parent1 = Util.getParent(doc1.getPath()).toLowerCase();

		// First ordering by author name
		if (!doc0.getAuthor().equals(doc1.getAuthor())) {
			return doc0.getAuthor().toLowerCase().compareTo(doc1.getAuthor().toLowerCase());
		} else {
			// Compare first with parent path, and second with document path
			if (!parent0.equals(parent1)) {
				return parent0.compareTo(parent1); 
			} else {
				return doc0.getPath().toLowerCase().compareTo(doc1.getPath().toLowerCase());
			}
		}
	}
}

String printCalendar(Calendar cal) {
	String value = cal.get(Calendar.YEAR)+"."+(cal.get(Calendar.MONTH)+1)+"."+cal.get(Calendar.DAY_OF_MONTH);
	if (cal.get(Calendar.HOUR) > 9) {
		value += " / " + cal.get(Calendar.HOUR);
	} else {
		value += " / 0" + cal.get(Calendar.HOUR);
	}

	if (cal.get(Calendar.MINUTE) > 9) {
		value += ":" + cal.get(Calendar.HOUR);
	} else {
		value += ":0" + cal.get(Calendar.HOUR);
	}

	if (cal.get(Calendar.SECOND) > 9) {
		value += ":" + cal.get(Calendar.SECOND);
	} else {
		value += ":0" + cal.get(Calendar.SECOND);
	}

	return value;
}

StringBuilder sb = new StringBuilder();
List docs = new ArrayList();
String role = ConfigDAO.getString("test.report.role", "test_reportuser");
String applicationUrl= ConfigDAO.getString("application.url", "http://localhost/OpenKM");
   // *** DEPRECATED since 6.2 *** String sysToken = JcrSessionManager.getInstance().getSystemToken();
String sysToken = DbSessionManager.getInstance().getSystemToken();

// Generating Lastday Date
Calendar now = Calendar.getInstance();
int myYear =   now.get(Calendar.YEAR);
int myMonth =  now.get(Calendar.MONTH)+1; // Note: zero based!
int myDay =    now.get(Calendar.DAY_OF_MONTH)-1;

// Building query
QueryParams queryParams = new QueryParams();	
Calendar to = Calendar.getInstance();
to.set(Calendar.HOUR, 0);
to.set(Calendar.MINUTE, 0);
to.set(Calendar.SECOND, 0);
to.set(Calendar.MILLISECOND, 0);

Calendar from = to.clone();
from.add(Calendar.DATE, -1);

Calendar date = Calendar.getInstance();
date.add(Calendar.MONTH, 1);
date.add(Calendar.DAY_OF_MONTH, -1);

queryParams.setName("***");
queryParams.setDomain(QueryParams.DOCUMENT); // Only documents
queryParams.setLastModifiedFrom(from);
queryParams.setLastModifiedTo(to);

for (QueryResult result : OKMSearch.getInstance().findPaginated(sysToken, queryParams, 0, Integer.MAX_VALUE).getResults()) {
	if (result.getDocument() != null) {
		Document doc = result.getDocument();
		// Parent must have role
		Map hm = OKMAuth.getInstance().getGrantedRoles(sysToken, Util.getParent(doc.getPath()));
		if (hm.keySet().contains(role)) {
			docs.add(doc);
		} 
	} else {
		sb.append("Error has been selected some results than is not a document" + "\n");
	}
}

Collections.sort(docs, new DocumentComparator());

// Creating content
String role = ConfigDAO.getString("test.report.role", "test_reportuser");
String actualAuthor = "";
sb.append("<html>\n");
sb.append("<head>\n"); 
sb.append("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"/>\n");
sb.append("<title>Daily Report</title>\n");
sb.append("</head>\n");
sb.append("<body style=\"background-color:#ffffff;font-family:verdana;padding:0;margin:0;\">\n");
sb.append("<!-- Start wrapper --><div id=\"wrapper\" style=\"width:800px;padding:0px;margin:0 auto;\"><!-- End wrapper -->");

// General info table
sb.append("<div id=\"header\" style=\"background-color:#ffffff;padding:0px;min-height:150px;\">");

sb.append("<div id=\"left-header\" style=\"width:45%;float:left;padding:15px;\">");
sb.append("<span style=\"font-size:32px;color:#08537a;\">DAILY REPORT</span><br/>");
sb.append("<span style=\"font-size:18px;color:#08537a;text-transform:uppercase;\">Datum: " + myDay + "." + myMonth + "." + myYear + "</span><br/>");
sb.append("</div>");

sb.append("<div id=\"right-header\" style=\"width:45%;float:right;padding:15px;\">");
sb.append("</div>");
sb.append("</div><!-- End header --><br/>");


// Documents table

if (docs.size()>0) {

	sb.append("<table border=\"1\" cellpadding=\"4\" cellspacing=\"0\" style=\"border-style:solid; border-width:1px;\">\n");
		
		// Documents rows
		for (Document doc : docs) 
		{
			if (!actualAuthor.equals(doc.getAuthor())) 
			{
				actualAuthor = doc.getAuthor();
				sb.append("<tr height=\"60\">\n");
					sb.append("<td colspan=\"5\" bgcolor=\"#cccccc\">\n");
					sb.append("<span style=\"color:#333333;\">All Documents updated by <b>" + doc.getAuthor() + "</b></span>");
					sb.append("</td>\n");
				sb.append("</tr>\n");
				sb.append("<tr>\n");
					// 1. Row: Date
					//sb.append("<td><b>Date</b></td>\n");
					// 2. Row: Person
					//sb.append("<td><b>Person</b></td>\n");
					// 3. Row: Directory
					sb.append("<td><b>Directory</b></td>");
					// 4. Row: Document
					sb.append("<td><b>Document</b></td>");
				sb.append("</tr>\n");
			}
				sb.append("<tr bgcolor=\"#ffffff\">\n");
				// 1. Row: Date
					//sb.append("<td>\n");
					//sb.append(printCalendar(doc.getActualVersion().getCreated()));
					//sb.append("</td>\n");
				// 2. Row: Person
					//sb.append("<td>\n");
					//sb.append(doc.getActualVersion().getAuthor());
					//sb.append("</td>\n");
				// 3. Row: Directory
					sb.append("<td>\n");
					//sb.append(GWTUtil.getParent(doc.getPath()));

					String str = GWTUtil.getParent(doc.getPath());
					String[] temp;
					String delimiter = "/okm:root";
					temp = str.split(delimiter);

					try {
        					sb.append(temp[1]);
        				}
    					catch (ArrayIndexOutOfBoundsException e) {
    						sb.append("/");
    					}   

					
					sb.append("</td>\n");
				// 4. Row: Document
					sb.append("<td>\n");
					sb.append("<a href=\""+applicationUrl+"?docPath="+URLEncoder.encode(doc.path, "UTF-8")+"\">");
					sb.append(GWTUtil.getName(doc.getPath()));
					sb.append("</a>");
					sb.append("</td>\n");
				sb.append("</tr>\n");
		}	
	sb.append("</table>\n");
}
sb.append("<br/>");
sb.append("<!-- End wrapper --></div>");
sb.append("</body>\n");
sb.append("</html>\n");

// Getting users mail list
List mails = new ArrayList();
for (User user : AuthDAO.findUsersByRole(role,true)) {
	if (user.getEmail() != null && !user.getEmail().equals("")) {
		mails.add(user.getEmail());
	}
}

if (mails.size() > 0 && docs.size() > 0) {
	MailUtils.sendMessage(mails, "Daily Report", sb.toString());
}

print(sb.toString());   

catalina.log
Code: Select all
2014-12-01 23:57:59,523 [ajp-bio-127.0.0.1-8009-exec-284] ERROR org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/OpenKM].[CronTabServlet]- Servlet.service() for servlet [CronTabServlet] in context with path [/OpenKM] threw exception [Servlet execution threw an exception] with root cause
java.lang.NoClassDefFoundError: A class required by class: com.openkm.frontend.client.util.Util could not be loaded:
java.lang.NoClassDefFoundError: Could not initialize class com.openkm.frontend.client.util.Util
	at bsh.BshClassManager.noClassDefFound(BshClassManager.java:568)
	at bsh.BshClassManager.plainClassForName(BshClassManager.java:244)
	at bsh.classpath.BshClassLoader.findClass(BshClassLoader.java:178)
	at bsh.classpath.BshClassLoader.loadClass(BshClassLoader.java:111)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:268)
	at bsh.classpath.ClassManagerImpl.classForName(ClassManagerImpl.java:195)
	at bsh.NameSpace.classForName(NameSpace.java:1253)
	at bsh.NameSpace.getImportedClassImpl(NameSpace.java:1189)
	at bsh.NameSpace.getClassImpl(NameSpace.java:1143)
	at bsh.NameSpace.getClass(NameSpace.java:1094)
	at bsh.NameSpace.getClass(NameSpace.java:1100)
	at bsh.NameSpace.getClass(NameSpace.java:1100)
	at bsh.NameSpace.getClass(NameSpace.java:1100)
	at bsh.Name.consumeNextObjectField(Name.java:301)
	at bsh.Name.toObject(Name.java:202)
	at bsh.Name.toObject(Name.java:185)
	at bsh.Name.invokeMethod(Name.java:832)
	at bsh.BSHMethodInvocation.eval(BSHMethodInvocation.java:75)
	at bsh.BSHPrimaryExpression.eval(BSHPrimaryExpression.java:102)
	at bsh.BSHPrimaryExpression.eval(BSHPrimaryExpression.java:47)
	at bsh.BSHArguments.getArguments(BSHArguments.java:65)
	at bsh.BSHPrimarySuffix.doName(BSHPrimarySuffix.java:167)
	at bsh.BSHPrimarySuffix.doSuffix(BSHPrimarySuffix.java:120)
	at bsh.BSHPrimaryExpression.eval(BSHPrimaryExpression.java:80)
	at bsh.BSHPrimaryExpression.eval(BSHPrimaryExpression.java:47)
	at bsh.BSHVariableDeclarator.eval(BSHVariableDeclarator.java:86)
	at bsh.BSHTypedVariableDeclaration.eval(BSHTypedVariableDeclaration.java:84)
	at bsh.BSHBlock.evalBlock(BSHBlock.java:130)
	at bsh.BSHBlock.eval(BSHBlock.java:80)
	at bsh.BSHBlock.eval(BSHBlock.java:46)
	at bsh.BSHIfStatement.eval(BSHIfStatement.java:48)
	at bsh.BSHBlock.evalBlock(BSHBlock.java:130)
	at bsh.BSHBlock.eval(BSHBlock.java:80)
	at bsh.BSHBlock.eval(BSHBlock.java:46)
	at bsh.BSHEnhancedForStatement.eval(BSHEnhancedForStatement.java:79)
	at bsh.Interpreter.eval(Interpreter.java:645)
	at bsh.Interpreter.eval(Interpreter.java:739)
	at bsh.Interpreter.eval(Interpreter.java:728)
	at com.openkm.util.ExecutionUtils.runScript(ExecutionUtils.java:112)
	at com.openkm.core.Cron$RunnerBsh.run(Cron.java:103)
	at com.openkm.servlet.admin.CronTabServlet.execute(CronTabServlet.java:230)
	at com.openkm.servlet.admin.CronTabServlet.doGet(CronTabServlet.java:116)
	at com.openkm.servlet.admin.CronTabServlet.service(CronTabServlet.java:72)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:311)
	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:116)
	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
	at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
	at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:101)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
	at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
	at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
	at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
	at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:182)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
	at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
	at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:173)
	at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
	at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
	at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:193)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:313)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1146)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
	at java.lang.Thread.run(Thread.java:701)

About Us

OpenKM is part of the management software. A management software is a program that facilitates the accomplishment of administrative tasks. OpenKM is a document management system that allows you to manage business content and workflow in a more efficient way. Document managers guarantee data protection by establishing information security for business content.