我正在尝试为oracle-ucm创建一个自定义Java组件。
但是,当我运行代码时,它会很简单地安装:
System code execution error. Unable to create service. java.lang.NoClassDefFoundError: com/lowes/content/edam/massMetaDataUpdate/service/ServiceApplication.
component.hda文件如下所示:
<?hda version="11.1.1.8.0PSU-2015-01-08 07:49:21Z-r123144" jcharset="UTF8" encoding="utf-8"?>
@Properties LocalData
ComponentName=LowesMassMetadataUpdater
blDateFormat=M/d{/yy}{ h:mm[:ss]{ a}}!mAM,PM!tAmerica/New_York
classpath=$COMPONENT_DIR/classes
hasPreferenceData=0
libpath=$COMPONENT_DIR/libs
preventAdditionalComponentDowngrade=0
version=2016_06_08(build 1)
@end作为参考,我的服务类的开头如下所示:
封装com.lowes.content.edam.massMetaDataUpdate.service;
import intradoc.server.Service;
public class MMUService extends Service
{ //this is the line that is throwing the error.
private ServiceApplication app = new ServiceApplication();
/** Default Constructor - Does Nothing */
public MMUService() { }
//rest of class omitted for brevity
}我的组件配置在MMUService类中,它与无法找到的类在同一个包中。两个类文件直接位于同一个文件夹中。那么为什么它能够找到初始的服务类,而不能找到来自同一个包的包含的助手类呢?
来自组件向导的高级生成设置
除以下情况外,所有空白:
自定义类路径: $COMPONENT_DIR/classes
自定义库路径: $COMPONENT_DIR/libs
发布于 2016-06-09 12:30:43
发布于 2016-07-01 15:55:13
我解决了这个问题。在应用程序显示NoClassDefFoundError之前,它显示了一个日志错误。但是,在随后的页面加载中,该错误将消失。
结果显示日志记录错误:
System code execution error. Unable to create service. Exception type is 'java.lang.ExceptionInInitializerError'.
Runtime error: org.apache.commons.logging.LogConfigurationException:
org.apache.commons.logging.LogConfigurationException:
org.apache.commons.logging.LogConfigurationException:
Class org.apache.commons.logging.impl.Jdk14Logger does not implement Log Runtime error:
org.apache.commons.logging.LogConfigurationException:
org.apache.commons.logging.LogConfigurationException:
Class org.apache.commons.logging.impl.Jdk14Logger does not implement Log Runtime error:
org.apache.commons.logging.LogConfigurationException:
Class org.apache.commons.logging.impl.Jdk14Logger does not implement Log才是我问题的真正原因。深入研究它可以发现,WCC中的Classloader正在加载不同版本的Apache ,而不是应用程序所期望的那样。
修复方法是创建一个SystemUtils的包装类来实现Log,然后设置系统属性org.apache.commons.logging.Log,这样当类调用LogFactory.getLog(classname.class);时,它们将得到我的whole类,并避开整个日志错误问题。
https://stackoverflow.com/questions/37706883
复制相似问题