Page 1 of 1

Deprecated classes in old beanshell script (5.1.8)

PostPosted:Tue Dec 02, 2014 10:59 am
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)

Re: Deprecated classes in old beanshell script (5.1.8)

PostPosted:Wed Dec 03, 2014 8:02 am
by jllort
I don't like much you use classes from frontend, you shoull remove it, because these classes almost times reference GWT libraries and you'll get error using it. Replace Util and GWTUtil for PathUtils ( http://doxygen.openkm.com/openkm/d8/d62 ... utils.html )

Re: Deprecated classes in old beanshell script (5.1.8)

PostPosted:Wed Dec 10, 2014 12:53 pm
by Sascha
Hi jllort,

thank you for the hint. With some edits the script now works fine.