簡體   English   中英

com.amazonaws.transform.JsonErrorUnmarshaller:方法 <init> (Ljava / lang / Class;)未找到

[英]com.amazonaws.transform.JsonErrorUnmarshaller: method <init>(Ljava/lang/Class;)V not found

我們正在使用一個名為logback-ext-cloudwatch-appender的庫將基於logback的日志發送到AWS Cloudwatch。 這就是我們pom.xml文件中的依賴關系。

    <dependency>
        <groupId>org.eluder.logback</groupId>
        <artifactId>logback-ext-cloudwatch-appender</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>

幾天前,這些錯誤開始出現在我們的日志中。

java.lang.NoSuchMethodError: com.amazonaws.transform.JsonErrorUnmarshaller: method <init>(Ljava/lang/Class;)V not found
    at com.amazonaws.services.logs.model.transform.InvalidParameterExceptionUnmarshaller.<init>(InvalidParameterExceptionUnmarshaller.java:26)
    at com.amazonaws.services.logs.AWSLogsClient.init(AWSLogsClient.java:280)
    at com.amazonaws.services.logs.AWSLogsClient.<init>(AWSLogsClient.java:275)
    at com.amazonaws.services.logs.AWSLogsClient.<init>(AWSLogsClient.java:248)
    at org.eluder.logback.ext.cloudwatch.appender.AbstractCloudWatchAppender.doStart(AbstractCloudWatchAppender.java:100)
    at org.eluder.logback.ext.aws.core.AbstractAwsEncodingStringAppender.start(AbstractAwsEncodingStringAppender.java:123)
    at org.eluder.logback.ext.cloudwatch.appender.AbstractCloudWatchAppender.start(AbstractCloudWatchAppender.java:95)
    at ch.qos.logback.ext.spring.DelegatingLogbackAppender.getDelegate(Unknown Source)
    at ch.qos.logback.ext.spring.DelegatingLogbackAppender.append(Unknown Source)
    at ch.qos.logback.ext.spring.DelegatingLogbackAppender.append(Unknown Source)
    at ch.qos.logback.core.UnsynchronizedAppenderBase.doAppend(UnsynchronizedAppenderBase.java:84)
    at ch.qos.logback.core.spi.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:48)
    at ch.qos.logback.classic.Logger.appendLoopOnAppenders(Logger.java:270)
    at ch.qos.logback.classic.Logger.callAppenders(Logger.java:257)
    at ch.qos.logback.classic.Logger.buildLoggingEventAndAppend(Logger.java:421)
    at ch.qos.logback.classic.Logger.filterAndLog_0_Or3Plus(Logger.java:383)
    at ch.qos.logback.classic.Logger.info(Logger.java:579)
    (truncated)

我發現我們已升級到AWS 1.11.5,但在該版本中找不到任何此類漏洞的證據。

事實證明,當前版本的logback-ext-cloudwatch-appender對特定版本的aws-java-sdk-logs 1.10.2具有傳遞依賴,該版本與其他aws-java-sdk庫1.11.0 兼容以上。 我們確實使用了許多其他的aws-java-sdk庫。 我們排除了這種依賴性。

<dependency>
    <groupId>org.eluder.logback</groupId>
    <artifactId>logback-ext-cloudwatch-appender</artifactId>
    <version>1.0-SNAPSHOT</version>
    <exclusions>
        <exclusion>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-java-sdk-core</artifactId>
        </exclusion>
        <exclusion>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-java-sdk-logs</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-java-sdk-core</artifactId>
    <version>1.11.5</version>
</dependency>
<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-java-sdk-logs</artifactId>
    <version>1.11.5</version>
</dependency>

那時我們開始遇到另一個錯誤。

 Exception in thread "org.myorg.task.MyTask working" java.lang.NoSuchMethodError: com.amazonaws.services.logs.AWSLogsClient.createLogGroup(Lcom/amazonaws/services/logs/model/CreateLogGroupRequest;)V
         at org.eluder.logback.ext.cloudwatch.appender.AbstractCloudWatchAppender.createLogGroup(AbstractCloudWatchAppender.java:171)
         at org.eluder.logback.ext.cloudwatch.appender.AbstractCloudWatchAppender.doStart(AbstractCloudWatchAppender.java:107)
         at org.eluder.logback.ext.aws.core.AbstractAwsEncodingStringAppender.start(AbstractAwsEncodingStringAppender.java:123)
         at org.eluder.logback.ext.cloudwatch.appender.AbstractCloudWatchAppender.start(AbstractCloudWatchAppender.java:95)
         at ch.qos.logback.core.joran.action.AppenderAction.end(AppenderAction.java:90)
         at ch.qos.logback.core.joran.spi.Interpreter.callEndAction(Interpreter.java:309)
         at ch.qos.logback.core.joran.spi.Interpreter.endElement(Interpreter.java:193)
         at ch.qos.logback.core.joran.spi.Interpreter.endElement(Interpreter.java:179)
         at ch.qos.logback.core.joran.spi.EventPlayer.play(EventPlayer.java:62)
         at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:155)
         at ch.qos.logback.core.sift.SiftingJoranConfiguratorBase.doConfigure(SiftingJoranConfiguratorBase.java:82)
         at ch.qos.logback.core.sift.AbstractAppenderFactoryUsingJoran.buildAppender(AbstractAppenderFactoryUsingJoran.java:51)
         at ch.qos.logback.core.sift.AppenderTracker.buildComponent(AppenderTracker.java:56)
         at ch.qos.logback.core.sift.AppenderTracker.buildComponent(AppenderTracker.java:32)
         at ch.qos.logback.core.spi.AbstractComponentTracker.getOrCreate(AbstractComponentTracker.java:124)
         at ch.qos.logback.core.sift.SiftingAppenderBase.append(SiftingAppenderBase.java:104)
         at ch.qos.logback.core.AppenderBase.doAppend(AppenderBase.java:82)
         at ch.qos.logback.core.spi.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:48)
         at ch.qos.logback.classic.Logger.appendLoopOnAppenders(Logger.java:270)
         at ch.qos.logback.classic.Logger.callAppenders(Logger.java:257)
         at ch.qos.logback.classic.Logger.buildLoggingEventAndAppend(Logger.java:421)
         at ch.qos.logback.classic.Logger.filterAndLog_0_Or3Plus(Logger.java:383)
         at ch.qos.logback.classic.Logger.info(Logger.java:579)

僅僅排除依賴項是行不通的。 我不得不分叉並重建logback-ext-cloudwatch-appender jar,並依賴於當前的1.11.5 aws-java-sdk庫。 試圖將新的AWS依賴項與針對舊庫構建的logback-ext-cloudwatch-appender jar一起使用,會導致createLogGroup的方法簽名(返回類型)不匹配,從而導致運行時錯誤。 為了使它運行,我只需要在派生版本中更改pom.xml文件,而不是源代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM