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

まず、Service の代わりにServiceHandlerを使用します。

[ビルド] > [詳細設定] の下に 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をロードしていることがわかります。

修正は、SystemUtils実装するための Wrapper クラスを作成しLog、システム プロパティを設定しorg.apache.commons.logging.Logて、クラスが呼び出したときLogFactory.getLog(classname.class);に My WCC Logger クラスを取得し、ログ エラーの問題全体を回避することでした。

于 2016-07-01T15:55:13.220 に答える