Dynamic Document Generator Plugin Upgrade - NoClassDefFoundError

Certified Lead Developer

Hi,

We have updated Dynamic Document Generator Plugin version form 1.8.5 to 1.8.7. After upgrading DOCX from XHTML is breaking when generating document, we didn't make any changes to our existing logic. The same code is working with older version - 1.8.5 in other environment. Based on the error looks like it missed some classes.

Error:  com.appiancorp.suiteapi.common.exceptions.AppianRuntimeException: com.appiancorp.suiteapi.common.exceptions.AppianException: java.lang.NoClassDefFoundError: com/lowagie/text/DocumentException

@jialin.wang @Appian please fix this issue ASAP

Caused by: java.lang.NoClassDefFoundError: com/lowagie/text/DocumentException
	at org.docx4j.org.xhtmlrenderer.docx.DocxRenderer.<init>(DocxRenderer.java:160)
	at org.docx4j.org.xhtmlrenderer.docx.DocxRenderer.<init>(DocxRenderer.java:85)
	at com.appiancorp.ps.xmlfo.ss.DocxFromXhtmlWithStyling.runSmartService(DocxFromXhtmlWithStyling.java:61)
	at com.appiancorp.ps.xmlfo.ss.AbstractDocumentGeneration.run(AbstractDocumentGeneration.java:49)
	at com.appiancorp.process.runtime.framework.DefaultActivityExecutor$1.lambda$call$0(DefaultActivityExecutor.java:136)
	at com.appiancorp.plugins.PluginUsageLogger.runWithPluginInformation(PluginUsageLogger.java:52)
	at com.appiancorp.process.runtime.framework.DefaultActivityExecutor$1.call(DefaultActivityExecutor.java:136)
	at com.appiancorp.process.runtime.framework.DefaultActivityExecutor$1.call(DefaultActivityExecutor.java:130)
	at com.appiancorp.common.ContextClassLoaderSwitcher.runInContext(ContextClassLoaderSwitcher.java:27)
	at com.appiancorp.process.runtime.framework.DefaultActivityExecutor.execute(DefaultActivityExecutor.java:130)
	at com.appiancorp.process.engine.UnattendedJavaActivityRequest.execute(UnattendedJavaActivityRequest.java:88)
	at com.appiancorp.process.engine.UnattendedJavaActivityRequestResponseCreator.getJavaActivityResultResponse(UnattendedJavaActivityRequestResponseCreator.java:21)
	at com.appiancorp.process.engine.UnattendedJavaActivityRequest.getJavaActivityResultResponse(UnattendedJavaActivityRequest.java:67)
	at com.appiancorp.process.engine.UnattendedJavaActivityRequest.execute0(UnattendedJavaActivityRequest.java:55)
	at com.appiancorp.common.persistence.data.AppianDataUserContextProvider.executeWithConsistentDataReads(AppianDataUserContextProvider.java:135)
	at com.appiancorp.process.engine.ProcessContinuationRequest.executeOuter(ProcessContinuationRequest.java:68)
	at com.appiancorp.process.engine.ContinuationRequest.execute(ContinuationRequest.java:113)
	at com.appiancorp.process.engine.UnattendedJavaActivityRequest.process(UnattendedJavaActivityRequest.java:41)
	at com.appiancorp.process.engine.ProcessEngineServiceImpl.processUnattendedRequest(ProcessEngineServiceImpl.java:167)
	at com.appiancorp.process.engine.ProcessEngineServiceImpl.processToNextAttended(ProcessEngineServiceImpl.java:233)
	at sun.reflect.GeneratedMethodAccessor4724.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.appiancorp.util.MethodInvocationReflectionImpl.proceed(MethodInvocationReflectionImpl.java:23)
	at com.appiancorp.security.authz.AuthorizationMethodInterceptor.invoke(AuthorizationMethodInterceptor.java:56)
	at com.appiancorp.services.ServiceManager$ServiceInvocationHandler.invoke(ServiceManager.java:479)
	at com.sun.proxy.$Proxy321.processToNextAttended(Unknown Source)
	at com.appiancorp.process.design.service.ProcessDesignServiceXmlImpl.initiateProcess(ProcessDesignServiceXmlImpl.java:1052)
	at com.appiancorp.process.design.service.ExtendedProcessDesignServiceJavaImpl.initiateProcessWithFullResult(ExtendedProcessDesignServiceJavaImpl.java:390)
	at sun.reflect.GeneratedMethodAccessor4747.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.appiancorp.kougar.services.KougarServiceInvocationHandler$JavaInvocationHandler.invoke(KougarServiceInvocationHandler.java:106)
	at com.appiancorp.kougar.services.KougarServiceInvocationHandler$KougarMethodInvocation.proceed(KougarServiceInvocationHandler.java:287)
	at com.appiancorp.security.authz.AuthorizationMethodInterceptor.invoke(AuthorizationMethodInterceptor.java:56)
	at com.appiancorp.kougar.services.KougarServiceInvocationHandler.invoke(KougarServiceInvocationHandler.java:324)
	at com.sun.proxy.$Proxy27.initiateProcessWithFullResult(Unknown Source)
	at com.appiancorp.process.runtime.activities.StartProcessSmartService2.run(StartProcessSmartService2.java:103)
	at com.appiancorp.process.runtime.framework.DefaultActivityExecutor$1.call(DefaultActivityExecutor.java:134)
	at com.appiancorp.process.runtime.framework.DefaultActivityExecutor$1.call(DefaultActivityExecutor.java:130)
	at com.appiancorp.common.ContextClassLoaderSwitcher.runInContext(ContextClassLoaderSwitcher.java:27)
	at com.appiancorp.process.runtime.framework.DefaultActivityExecutor.execute(DefaultActivityExecutor.java:130)
	at com.appiancorp.expr.server.reaction.smartservicebridge.SmartServiceBridgeReaction.lambda$activate$1(SmartServiceBridgeReaction.java:126)
	at com.appiancorp.expr.server.reaction.smartservicebridge.ActivationMetricRecorder.executeAndTime(ActivationMetricRecorder.java:18)
	at com.appiancorp.expr.server.reaction.smartservicebridge.SmartServiceBridgeReaction.activate(SmartServiceBridgeReaction.java:116)
	at com.appiancorp.core.expr.reaction.ExternalReactionTree.activate(ExternalReactionTree.java:110)
	at com.appiancorp.core.expr.reaction.ChainReactionTree.activateReaction(ChainReactionTree.java:240)
	at com.appiancorp.core.expr.reaction.ChainReactionTree.activate(ChainReactionTree.java:208)
	at com.appiancorp.core.expr.reaction.ChainReactionTree.activateBody(ChainReactionTree.java:139)
	at com.appiancorp.core.expr.reaction.ChainReactionTree.activate(ChainReactionTree.java:110)
	at com.appiancorp.core.expr.reaction.LiveReaction.applySideEffect(LiveReaction.java:37)
	at com.appiancorp.core.expr.reaction.SaveTarget.setValue0(SaveTarget.java:67)
	at com.appiancorp.core.expr.reaction.SaveTarget.setValue(SaveTarget.java:57)
	at com.appiancorp.core.expr.reaction.ContextReferenceActivator.activateReaction(ContextReferenceActivator.java:98)
	at com.appiancorp.core.expr.reaction.ContextReferenceActivator.activate(ContextReferenceActivator.java:91)
	at com.appiancorp.core.expr.reaction.ContextReferenceActivator.doActivateContextReference(ContextReferenceActivator.java:64)
	at com.appiancorp.core.expr.reaction.ContextReferenceActivator.activateContextReference(ContextReferenceActivator.java:45)
	... 527 more
Caused by: java.lang.ClassNotFoundException: com.lowagie.text.DocumentException not found by DynamicDocumentGen [56]
	at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1650)
	at org.apache.felix.framework.BundleWiringImpl.access$200(BundleWiringImpl.java:80)
	at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:2064)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
	... 584 more

  Discussion posts and replies are publicly visible

  • 0
    Certified Lead Developer

    @Appian do we have any update on this issue.

    Appian should really think about plugin upgrades, currently there is no way to revert back to old version plugin until we create Appian support ticket and ask them to delete new version plugin and deploy old plugin version. If it is not a production environment Appian support won't even respond quickly which will impact lot Dev velocity as well as deployment timeline. Appian should really think about this process, I am not quit understand why Appian is not providing an option to remove plugins our self (Since only Admins can access this page) in cloud environment. My suggestion to Appian is give the users an option to deploy old version of plugins (make available for up to 3 to 5 versions) this gives more control to developers to test new plugin versions (In case if won't they can easily revert back to old version)