1

我正在尝试为创建一个自定义 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

4

2 回答 2

1

对于初学者,我会使用ServiceHandler而不是 Service。

确保在 Build > Advanced settings 下有 installID。

可以在此处找到有关构建自定义组件的一些额外阅读:

于 2016-06-09T12:30:43.390 回答
0

我能够找出问题所在。在应用程序显示之前,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 Commons Logging版本与应用程序预期的不同。

修复方法是创建一个 Wrapper 类SystemUtils来实现Log,然后设置系统属性org.apache.commons.logging.Log,以便当类调用时,LogFactory.getLog(classname.class);它们将获得 My WCC Logger 类并回避整个日志记录错误问题。

于 2016-07-01T15:55:13.220 回答