Skip to content

Award-Winning Innovative Solutions

As an industry leader, Rivet Logic has been recognized for our innovative digital experience solutions in the areas of content management, collaboration and social community. Here are a few of our accolades.

KMWorld Trend-Setting Product

KMWorld has recognized Rivet Logic's ECM Solutions as a Trend-Setting Product for the past three consecutive years since 2009.

Read More - 2012201120102009


KMWorld 100 Companies That Matter

KMWorld has named Rivet Logic as one of the 100 Companies That Matter in Knowledge Management for the past four consecutive years since 2009.

Read More - 20132012201120102009


Alfresco North American Partner of the Year

Alfresco selected Rivet Logic as its North American Partner of the Year on several occasions.


Alfresco Solution of the Year

Rivet Logic was awarded the Alfresco North America Solution of the Year Award for our Crafter CMS open source project that has been used to successfully implement numerous, prominent, next-generation enterprise websites.


Alfresco Innovation Award

The Alfresco Innovation Awards recognizes outstanding innovation in the use of Alfresco to deliver innovative business solutions and immediate value to organizations operating on a limited budget and maximizing use of existing resources.

Rivet Logic led the development of ECM and WCM solutions for Harvard Business Publishing. which was selected as the overall winner.

Read More

Shagul Hameed Khajamohideen, <script type='text/javascript'>function showError1() {document.getElementById('error1').style.display = 'block';document.getElementById('toggleError1Btn').innerHTML = 'Hide error';}function hideError1() {document.getElementById('error1').style.display = 'none';document.getElementById('toggleError1Btn').innerHTML = 'Show error';}function toggleError1() {if (document.getElementById('error1').style.display == 'none') {showError1();} else {hideError1();}}</script><a id='toggleError1Btn' onclick='toggleError1()' style='color: red; font-size: 14px; font-family: Arial, Helvetica, sans-serif; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; text-transform: none; cursor: pointer'>Show error</a><div id='error1' style='display: none;'><pre>$
Expression model.company is undefined on line 24, column 76 in templates/web/quote-display.ftl.
The problematic instruction:
----------
==> ${model.company} [on line 24, column 74 in templates/web/quote-display.ftl]
----------

Java backtrace for programmers:
----------
freemarker.core.InvalidReferenceException: Expression model.company is undefined on line 24, column 76 in templates/web/quote-display.ftl.
	at freemarker.core.TemplateObject.assertNonNull(TemplateObject.java:125)
	at freemarker.core.Expression.getStringValue(Expression.java:118)
	at freemarker.core.Expression.getStringValue(Expression.java:93)
	at freemarker.core.DollarVariable.accept(DollarVariable.java:76)
	at freemarker.core.Environment.visit(Environment.java:221)
	at freemarker.core.MixedContent.accept(MixedContent.java:92)
	at freemarker.core.Environment.visit(Environment.java:221)
	at freemarker.core.Environment.process(Environment.java:199)
	at freemarker.template.Template.process(Template.java:259)
	at org.rivetlogic.crafter.engine.freemarker.RenderComponentDirective.processComponentTemplate(RenderComponentDirective.java:189)
	at org.rivetlogic.crafter.engine.freemarker.RenderComponentDirective.execute(RenderComponentDirective.java:113)
	at freemarker.core.Environment.visit(Environment.java:274)
	at freemarker.core.UnifiedCall.accept(UnifiedCall.java:126)
	at freemarker.core.Environment.visit(Environment.java:221)
	at freemarker.core.MixedContent.accept(MixedContent.java:92)
	at freemarker.core.Environment.visit(Environment.java:221)
	at freemarker.core.Environment.visit(Environment.java:406)
	at freemarker.core.BodyInstruction.accept(BodyInstruction.java:93)
	at freemarker.core.Environment.visit(Environment.java:221)
	at freemarker.core.IfBlock.accept(IfBlock.java:82)
	at freemarker.core.Environment.visit(Environment.java:221)
	at freemarker.core.Macro$Context.runMacro(Macro.java:172)
	at freemarker.core.Environment.visit(Environment.java:614)
	at freemarker.core.UnifiedCall.accept(UnifiedCall.java:106)
	at freemarker.core.Environment.visit(Environment.java:221)
	at freemarker.core.MixedContent.accept(MixedContent.java:92)
	at freemarker.core.Environment.visit(Environment.java:221)
	at freemarker.core.IteratorBlock$Context.runLoop(IteratorBlock.java:179)
	at freemarker.core.Environment.visit(Environment.java:428)
	at freemarker.core.IteratorBlock.accept(IteratorBlock.java:102)
	at freemarker.core.Environment.visit(Environment.java:221)
	at freemarker.core.ConditionalBlock.accept(ConditionalBlock.java:79)
	at freemarker.core.Environment.visit(Environment.java:221)
	at freemarker.core.Environment.visit(Environment.java:406)
	at freemarker.core.BodyInstruction.accept(BodyInstruction.java:93)
	at freemarker.core.Environment.visit(Environment.java:221)
	at freemarker.core.Environment.visit(Environment.java:406)
	at freemarker.core.BodyInstruction.accept(BodyInstruction.java:93)
	at freemarker.core.Environment.visit(Environment.java:221)
	at freemarker.core.IfBlock.accept(IfBlock.java:82)
	at freemarker.core.Environment.visit(Environment.java:221)
	at freemarker.core.Macro$Context.runMacro(Macro.java:172)
	at freemarker.core.Environment.visit(Environment.java:614)
	at freemarker.core.UnifiedCall.accept(UnifiedCall.java:106)
	at freemarker.core.Environment.visit(Environment.java:221)
	at freemarker.core.MixedContent.accept(MixedContent.java:92)
	at freemarker.core.Environment.visit(Environment.java:221)
	at freemarker.core.Macro$Context.runMacro(Macro.java:172)
	at freemarker.core.Environment.visit(Environment.java:614)
	at freemarker.core.UnifiedCall.accept(UnifiedCall.java:106)
	at freemarker.core.Environment.visit(Environment.java:221)
	at freemarker.core.MixedContent.accept(MixedContent.java:92)
	at freemarker.core.Environment.visit(Environment.java:221)
	at freemarker.core.Environment.process(Environment.java:199)
	at freemarker.template.Template.process(Template.java:259)
	at org.springframework.web.servlet.view.freemarker.FreeMarkerView.processTemplate(FreeMarkerView.java:366)
	at org.springframework.web.servlet.view.freemarker.FreeMarkerView.doRender(FreeMarkerView.java:283)
	at org.springframework.web.servlet.view.freemarker.FreeMarkerView.renderMergedTemplateModel(FreeMarkerView.java:233)
	at org.springframework.web.servlet.view.AbstractTemplateView.renderMergedOutputModel(AbstractTemplateView.java:167)
	at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:262)
	at org.rivetlogic.crafter.engine.view.UserAgentAwareCrafterPageView.renderActualView(UserAgentAwareCrafterPageView.java:33)
	at org.rivetlogic.crafter.engine.view.CrafterPageView.renderMergedOutputModel(CrafterPageView.java:208)
	at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:262)
	at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1180)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:950)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.rivetlogic.crafter.security.servlet.filters.RequestSecurityFilter$1.processRequest(RequestSecurityFilter.java:146)
	at org.rivetlogic.crafter.security.impl.processors.RequestSecurityProcessorChainImpl.processRequest(RequestSecurityProcessorChainImpl.java:40)
	at org.rivetlogic.crafter.security.impl.processors.UrlAccessRestrictionCheckingProcessor.processRequest(UrlAccessRestrictionCheckingProcessor.java:110)
	at org.rivetlogic.crafter.security.impl.processors.RequestSecurityProcessorChainImpl.processRequest(RequestSecurityProcessorChainImpl.java:40)
	at org.rivetlogic.crafter.security.impl.processors.SecurityExceptionProcessor.processRequest(SecurityExceptionProcessor.java:68)
	at org.rivetlogic.crafter.security.impl.processors.RequestSecurityProcessorChainImpl.processRequest(RequestSecurityProcessorChainImpl.java:40)
	at org.rivetlogic.crafter.security.impl.processors.SavedRequestAwareProcessor.processRequest(SavedRequestAwareProcessor.java:62)
	at org.rivetlogic.crafter.security.impl.processors.RequestSecurityProcessorChainImpl.processRequest(RequestSecurityProcessorChainImpl.java:40)
	at org.rivetlogic.crafter.security.impl.processors.LogoutProcessor.processRequest(LogoutProcessor.java:106)
	at org.rivetlogic.crafter.security.impl.processors.RequestSecurityProcessorChainImpl.processRequest(RequestSecurityProcessorChainImpl.java:40)
	at org.rivetlogic.crafter.security.impl.processors.LoginProcessor.processRequest(LoginProcessor.java:134)
	at org.rivetlogic.crafter.security.impl.processors.RequestSecurityProcessorChainImpl.processRequest(RequestSecurityProcessorChainImpl.java:40)
	at org.rivetlogic.crafter.security.impl.processors.AuthenticationTokenResolvingProcessor.processRequest(AuthenticationTokenResolvingProcessor.java:118)
	at org.rivetlogic.crafter.security.impl.processors.RequestSecurityProcessorChainImpl.processRequest(RequestSecurityProcessorChainImpl.java:40)
	at org.rivetlogic.crafter.engine.security.SiteNameBasedTenantNameResolvingProcessor.processRequest(SiteNameBasedTenantNameResolvingProcessor.java:47)
	at org.rivetlogic.crafter.security.impl.processors.RequestSecurityProcessorChainImpl.processRequest(RequestSecurityProcessorChainImpl.java:40)
	at org.rivetlogic.crafter.security.servlet.filters.RequestSecurityFilter.doFilterInternal(RequestSecurityFilter.java:98)
	at org.rivetlogic.crafter.security.servlet.filters.RequestSecurityFilter.doFilter(RequestSecurityFilter.java:80)
	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:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.rivetlogic.crafter.engine.servlet.filter.AbstractSiteContextResolvingFilter.handleSiteNameResolved(AbstractSiteContextResolvingFilter.java:152)
	at org.rivetlogic.crafter.engine.servlet.filter.AbstractSiteContextResolvingFilter.doFilter(AbstractSiteContextResolvingFilter.java:98)
	at org.rivetlogic.crafter.engine.servlet.filter.AbstractSiteContextResolvingFilter.doFilter(AbstractSiteContextResolvingFilter.java:91)
	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:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.rivetlogic.crafter.engine.servlet.filter.ExceptionHandlingFilter.doFilter(ExceptionHandlingFilter.java:50)
	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:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.rivetlogic.crafter.security.servlet.filters.RequestContextBindingFilter.doFilterInternal(RequestContextBindingFilter.java:47)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
	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:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:470)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
	at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190)
	at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:291)
	at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:776)
	at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:705)
	at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:898)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690)
	at java.lang.Thread.run(Thread.java:662)
</pre></div>

Rivet Logic gives me the freedom to explore my skills and advance in technical knowledge very quickly. Working with open source technologies provides me design perspectives and shortens the learning curve.

Shagul Hameed Khajamohideen Sr. Architect at Rivet Logic