• 5.0 RC1 source code

  • 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.
 #7043  by raviskiran
 
Hi,

I would like to know where I can get 5.0 rc1 code as you said download issues on checkout has been fixed in that version. I want to look at it and resolve it on my openkm 4

Thanks
Ravi Kiran
 #7048  by raviskiran
 
I know how to check out . So are you saying that the download issue has been fixed on the code that is available on SVN?
 #7050  by jllort
 
Yes it's so easy to solve, take a look at index.html and Util.java file looking for :
Code: Select all
<div style="display:none;visibility:hidden;">
			<iframe src="" id="__download" style="width:0;height:0;border:0"></iframe>
		</div> 
And then must replace Util.DownloadFile with
Code: Select all
/**
	 * Download file
	 * 
	 * @param path
	 * @param params
	 */
	public static void downloadFile(String path, String params) {

		if (!params.equals("") && !params.endsWith("&")) {
			params += "&";
		}
		final Element downloadIframe = RootPanel.get("__download").getElement(); 
		String url = Config.OKMDownloadServlet + "?" + params + "id=" + URL.encodeComponent(path);
		DOM.setElementAttribute(downloadIframe, "src", url); 
	}
 #7099  by epalite
 
Hi,

1. If I do a right click on a file, and select download, the browser spins forever.

2. If I select History -> View, I can download the file.

Following is the extract from log file which I think is relevant to the download problem.

Environment: OpenKM 5 on Win Server 2003 SE R2, with wide LAN but no Internet access. Drag instal, with ws folder removed to address lack of Internet access problem.
Code: Select all
2010-11-17 15:57:00,659 ERROR [com.openkm.frontend.server.OKMDownloadServlet] 
ClientAbortException:  java.net.SocketException: Software caused connection abort: socket write error
	at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:358)
	at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:434)
	at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:349)
	at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:381)
	at org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:370)
	at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:89)
	at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:1026)
	at org.apache.commons.io.IOUtils.copy(IOUtils.java:999)
	at com.openkm.frontend.server.OKMDownloadServlet.sendFile(OKMDownloadServlet.java:245)
	at com.openkm.frontend.server.OKMDownloadServlet.service(OKMDownloadServlet.java:182)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:182)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:432)
	at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
	at java.lang.Thread.run(Thread.java:662)
Caused by: java.net.SocketException: Software caused connection abort: socket write error
	at java.net.SocketOutputStream.socketWrite0(Native Method)
	at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
	at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
	at org.apache.coyote.http11.InternalOutputBuffer.realWriteBytes(InternalOutputBuffer.java:737)
	at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:434)
	at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:349)
	at org.apache.coyote.http11.InternalOutputBuffer$OutputStreamOutputBuffer.doWrite(InternalOutputBuffer.java:761)
	at org.apache.coyote.http11.filters.IdentityOutputFilter.doWrite(IdentityOutputFilter.java:118)
	at org.apache.coyote.http11.InternalOutputBuffer.doWrite(InternalOutputBuffer.java:570)
	at org.apache.coyote.Response.doWrite(Response.java:560)
	at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:353)
	... 29 more
2010-11-17 15:57:00,659 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/OpenKM].[OKMDownloadServlet]] Servlet.service() for servlet OKMDownloadServlet threw exception
com.openkm.frontend.client.OKMException
	at com.openkm.frontend.server.OKMDownloadServlet.service(OKMDownloadServlet.java:193)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:182)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:432)
	at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
	at java.lang.Thread.run(Thread.java:662)
2010-11-17 15:57:00,659 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost]] Exception Processing ErrorPage[exceptionType=java.lang.Exception, location=/error.jsp]
java.lang.IllegalStateException
	at org.apache.coyote.Response.reset(Response.java:297)
	at org.apache.catalina.connector.Response.reset(Response.java:652)
	at org.apache.catalina.connector.Response.reset(Response.java:916)
	at org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.java:416)
	at org.apache.catalina.core.StandardHostValve.throwable(StandardHostValve.java:270)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
	at java.lang.Thread.run(Thread.java:662)
 #7105  by raviskiran
 
jllort wrote:Yes it's so easy to solve, take a look at index.html and Util.java file looking for :
Code: Select all
<div style="display:none;visibility:hidden;">
			<iframe src="" id="__download" style="width:0;height:0;border:0"></iframe>
		</div> 
And then must replace Util.DownloadFile with
Code: Select all
/**
	 * Download file
	 * 
	 * @param path
	 * @param params
	 */
	public static void downloadFile(String path, String params) {

		if (!params.equals("") && !params.endsWith("&")) {
			params += "&";
		}
		final Element downloadIframe = RootPanel.get("__download").getElement(); 
		String url = Config.OKMDownloadServlet + "?" + params + "id=" + URL.encodeComponent(path);
		DOM.setElementAttribute(downloadIframe, "src", url); 
	}
@ jllort
Were the changes you said should be made on openKM 4.1 ?
Because I didnt find this function downloadFile in 4.1.
Can you tell me how I should fix this on 4.1

Thanks
Ravi Kiran
 #7113  by jllort
 
It's easy, in version 4.1 must replace Util.download file method for 5.0 implementation and adding into index.html the div
 #7114  by raviskiran
 
Code: Select all
	/**
	 * Download document
	 */
	public void downloadDocument(boolean checkout) {
		Log.debug("downloadDocument()");
		if (isDocumentSelected()) {
			Log.debug("jump to download");
			Main.get().redirect = true;
			Window.open(Config.OKMDownloadServlet + (checkout?"?checkout&":"?") + "id=" + URL.encodeComponent(getDocument().getPath()), "_self", "");
			Main.get().redirect = false;
		}
		Log.debug("downloadDocument: void");
	}
I found this in ExtendedScrollTable.java, is this the function I should change?
 #7123  by jllort
 
In 4.1 probably downloading is not concentrate in Util.java

Make a search of all Config.OKMDownloadServlet ( where is referenced ). In all of that places must doing the change.

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.