首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WCC中带有自定义Java组件的NoClassDefFoundError

WCC中带有自定义Java组件的NoClassDefFoundError
EN

Stack Overflow用户
提问于 2016-06-08 15:31:11
回答 2查看 399关注 0票数 1

我正在尝试为oracle-ucm创建一个自定义Java组件。

但是,当我运行代码时,它会很简单地安装:

System code execution error. Unable to create service. java.lang.NoClassDefFoundError: com/lowes/content/edam/massMetaDataUpdate/service/ServiceApplication.

component.hda文件如下所示:

代码语言:javascript
复制
<?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;

代码语言:javascript
复制
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

EN

回答 2

Stack Overflow用户

发布于 2016-06-09 12:30:43

首先,我将使用ServiceHandler而不是服务。

确保在Build > Advanced设置下有一个installID。

有关构建自定义组件的其他阅读可以在这里找到:

票数 1
EN

Stack Overflow用户

发布于 2016-07-01 15:55:13

我解决了这个问题。在应用程序显示NoClassDefFoundError之前,它显示了一个日志错误。但是,在随后的页面加载中,该错误将消失。

结果显示日志记录错误:

代码语言:javascript
复制
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类,并避开整个日志错误问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37706883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档