我第一次遇到這個問題,這是服務中拋出的例外
Exception in thread "Thread-1" java.lang.NoSuchMethodError: org.codehaus.jackson.type.JavaType.<init>(Ljava/lang/Class;)V
at org.codehaus.jackson.map.type.TypeBase.<init>(TypeBase.java:13)
at org.codehaus.jackson.map.type.SimpleType.<init>(SimpleType.java:45)
at org.codehaus.jackson.map.type.SimpleType.<init>(SimpleType.java:40)
at org.codehaus.jackson.map.type.TypeFactory._fromClass(TypeFactory.java:374)
at org.codehaus.jackson.map.type.TypeFactory._fromType(TypeFactory.java:434)
at org.codehaus.jackson.map.type.TypeFactory.type(TypeFactory.java:61)
at org.codehaus.jackson.map.ObjectMapper.<clinit>(ObjectMapper.java:174)
at com.kx.proto.validation.util.Common.<clinit>(Common.java:41)
并且一旦拋出此例外,服務將停止接收對服務進行的后續 api 呼叫(即使我已經捕獲了例外),pod 仍處于運行狀態。我對這里的兩件事感到好奇
- 拋出的例外,如何解決?更改 POM 檔案?
- 為什么已捕獲的例外會阻止服務接收進一步的 REST api 呼叫。基本上在例外之后,服務中的所有api都開始超時。
下面是拋出例外的一段代碼
在這條線上
GeneratedMessageV3 messageV3 = Common.loadDefaultObjectFromMessage("com.kx.proto.", recordId.toUpperCase() "Record");
這是訊息方法中的 loadDefaultObject
public static GeneratedMessageV3 loadDefaultObjectFromMessage(String pkg, String messageName) {
try {
Class<?> record = Class.forName(pkg messageName);
Optional<Method> getDefaultInstance = Arrays.asList(record.getDeclaredMethods()).stream().filter((method) -> {
return method.getName().equals("getDefaultInstance");
}).findFirst();
if (getDefaultInstance.isPresent()) {
Object obj = ((Method)getDefaultInstance.get()).invoke((Object)null, (Object[])null);
return (GeneratedMessageV3)obj;
}
} catch (ClassNotFoundException var5) {
System.out.println("class not found " var5.getMessage());
} catch (Exception var6) {
var6.printStackTrace();
}
return null;
}
uj5u.com熱心網友回復:
NoSuchMethodError 是在編譯期間的類路徑與運行時的類路徑不同時發生的錯誤(不是例外)。
它說:我可以在編譯期間找到該方法,但現在在運行時找不到該方法。
它通常發生在運行時類路徑與編譯類路徑不同時。如果您的專案 A 依賴于 jar B,而 jar B 又依賴于 jar C,這將變得更加復雜。假設所有三個專案(A、B 和 C)都是在不同時間編譯/發布的。
從做mvn dependency:tree你的專案開始。詢問詳細版本。一個典型的原因是依賴版本被較低版本覆寫。例如,您的專案 A 依賴于 C 1.2 和 B 3.0,但 B 3.0 依賴于 C 1.4。如果 B 是使用自 C 1.3 起才存在的 C 方法編譯的呢?當 B 在專案 A 中使用 C 1.2 而不是 C 1.4 運行時,它找不到該方法并拋出 NoSuchMethodError。
注意:有一個強制執行規則來強制執行不降級傳遞依賴項。在運行時避免此類意外非常有用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/462357.html
上一篇:對R中串列內的串列長度求和
