私は自分で作成したjarの中にEnumを持っています。この jar は、enum 値を使用する 2 番目の jar の依存関係です。
ここで、2 番目の jar はロギング フレームワークですが、この場合の最初の jar はロギング フレームワークのモデル クラスです。
このロギング フレームワークを、作成した Web アプリケーションに実装しようとしています。簡単に言えば、まだ作業が必要ですが、1 つの問題で立ち往生しています。フレームワークの構成初期化でのエラーは例外としてキャッチされ、メソッドが呼び出されます。このメソッドには、パラメーターの 1 つとして Enum 値があります。ただし、この列挙型で java.lang.NoSuchFieldError が発生します。
Enum 値が ERROR だったので、偶然かもしれないと考えました。しかし、BABYLOVE に変更すると、エラー メッセージも変更されました。
クラス/列挙名の冗長性や重複の可能性をチェックしましたが、見つけることができるものはありません。
注文の順序:
- ロギング フレームワークの初期化のための Web アプリ呼び出し (直接依存)
- logging-framework には独自の構成の読み込みに問題があり、例外がスローされます
- 例外が処理され、メソッドが呼び出されてエラーが登録されます
- メソッドはいくつかのパラメーターで呼び出されます。1 つは logging-framework-model.jar からの列挙値であり、Web アプリの推移的な依存関係です。
Web アプリが例外をスローする
java.lang.NoSuchFieldError: BABYLOVE at logging.framework.Constants.<clinit>(Constants.java:52) at logging.framework.Logger.<init>(Logger.java:60) at logging.framework.LogContext.getLoggerFromContext(LogContext.java:95) at logging.framework.LogContext.getCurrent(LogContext.java:48) at action.navigation.CalendarElementEditorAction.execute(CalendarElementEditorAction.java:39) Truncated. see log file for complete stacktrace
定数、51 ~ 52 行目:
public static final Event ConfigValidationFailed =
EventLogHelper.getEvent(EventLogSource.LoggingFramework, EventLogEntryType.BABYLOVE");
EventLogEntryType:
@XmlType(name = "EventLogEntryType")
@XmlEnum
public enum EventLogEntryType {
//for test purposes, should be removed. This variable is given a name that can not be confused with standard names in error messages, like Error and Warning can.
@XmlEnumValue("BabyLove")
BABYLOVE("BabyLove"),
@XmlEnumValue("Error")
ERROR("Error"),
@XmlEnumValue("Warning")
WARNING("Warning"),
@XmlEnumValue("Information")
INFORMATION("Information"),
@XmlEnumValue("SuccessAudit")
SUCCESSAUDIT("SuccessAudit"),
@XmlEnumValue("FailureAudit")
FAILUREAUDIT("FailureAudit");
private final String value;
EventLogEntryType(String v) {
value = v;
}
public String value() {
return value;
}
public static EventLogEntryType fromValue(String v) {
for (EventLogEntryType c: EventLogEntryType .values()) {
if (c.value.equals(v)) {
return c;
}
}
throw new IllegalArgumentException(v);
}
それが問題かどうかはわかりませんが、maven2 を使用して依存関係を処理しています。