AWS SQS 发送消息 java.lang.NoSuchFieldError: CLIENT_ENDPOINT

时间:2021-05-20 14:53:35

标签: java amazon-web-services gradle sdk amazon-sqs

java.lang.NoSuchFieldError: CLIENT_ENDPOINT
    at com.amazonaws.services.sqs.AmazonSQSClient.executeSendMessage(AmazonSQSClient.java:1813)
    at com.amazonaws.services.sqs.AmazonSQSClient.sendMessage(AmazonSQSClient.java:1795)
    at com.tvg.atp.orch.utils.SoapUtil.sendErrorString(SoapUtil.java:700)
    at com.tvg.atp.orch.handler.OrchFunction.apply(OrchFunction.java:73)
    at com.tvg.atp.orch.controller.OrchController.processEvent(OrchController.java:55)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:564)
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190)
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:105)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:878)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:792)
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:652)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:109)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:888)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1597)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.base/java.lang.Thread.run(Thread.java:832)

我对 gradle 比较陌生。我正在向 AWS SQS 死信队列发送消息。我不断收到上述错误。同一个类首先尝试根据过滤器将消息传递到另一个队列,如果不成功,则将消息发送到 dlq。我已经测试了快乐路径并且它有效。生成了错误字符串,但无法将消息发送到 dlq。我读过这通常是与 sdk 的冲突,但我无法解决它。这是我的 build.gradle 文件:

buildscript {
    ext {
        SPRING_BOOT = '2.2.12.RELEASE'
        SPRING_CLOUD_AWS = '2.2.4.RELEASE'
        SPRING_CLOUD = 'Hoxton.SR8'
        AWS_SDK = "1.11.611"
        SPRING_BOOT_GRADLE_PLUGIN='2.4.0'
    }
    repositories {
        maven {
            url = uri('https://repo.maven.apache.org/maven2/')
        }
    }
    dependencies {
        classpath "org.springframework.boot:spring-boot-gradle-plugin:${SPRING_BOOT}"
        classpath "gradle.plugin.com.github.spotbugs:spotbugs-gradle-plugin:2.0.0"
        classpath "org.owasp:dependency-check-gradle:6.1.0"
        classpath 'com.github.ben-manes:gradle-versions-plugin:0.27.0'
    }
}

plugins {
    id 'net.ltgt.apt' version '0.21'
    id 'net.ltgt.apt-idea' version '0.21'
    id "com.gorylenko.gradle-git-properties" version "2.0.0"
}

configurations {
    antJUnit
}
dependencies {
    antJUnit 'org.apache.ant:ant-junit:1.10.8'
}


apply plugin: 'io.spring.dependency-management'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'groovy'

group = "com.group.${rootProject.name}"
archivesBaseName = "${rootProject.name}"

sourceCompatibility = 1.8
//mainClassName = 'com.group.notifications.handler.ScheduledEventHandlerImplementation'
dependencyManagement {
    dependencies {
        dependency "org.springframework.boot:spring-boot-starter:${SPRING_BOOT}"
        dependency "org.springframework.boot:spring-boot-starter-web:${SPRING_BOOT}"
        //dependency "org.springframework.boot:spring-boot-starter-activemq:${SPRING_BOOT}"
        
        dependency 'xalan:xalan:2.7.1'
        dependency 'commons-lang:commons-lang:2.3'
        dependency 'net.logstash.logback:logstash-logback-encoder:6.1'
        dependency 'org.apache.commons:commons-lang3:3.11'
        dependency 'javax.xml.bind:jaxb-api:2.3.1'
        dependency 'xerces:xercesImpl:2.8.1'
        dependency 'org.mvel:mvel2:2.4.11.Final'
    }
    imports {
        mavenBom org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES
        mavenBom "org.springframework.cloud:spring-cloud-dependencies:${SPRING_CLOUD}"
        mavenBom "org.springframework.cloud:spring-cloud-aws-dependencies:${SPRING_CLOUD_AWS}"
    }
    testCompile {
        dependencies {
            //dependency "org.spockframework:spock-core:1.3-groovy-2.5"
        }
    }
}


allprojects {
    apply plugin: 'java'
    apply plugin: 'jacoco'
    repositories {
        maven {
            url = uri('https://repo.maven.apache.org/maven2/')
        }
    }
}

//apply from: 'gradle/code-quality.gradle'
apply from: 'gradle/dependency-check.gradle'
//apply from: 'gradle/utils.gradle'
apply from: 'gradle/dependency-updates.gradle'

apply plugin: 'application'
apply plugin: 'org.springframework.boot'

dependencies {
    compile "org.springframework.boot:spring-boot-starter-actuator"
    compile "org.springframework.boot:spring-boot-starter-web"
    //compile 'org.springframework.boot:spring-boot-starter-activemq:2.4.1'
    compile 'org.springframework.cloud:spring-cloud-starter-aws-secrets-manager-config'
    compile "org.springframework.cloud:spring-cloud-function-adapter-aws"
    compile 'com.amazonaws:amazon-sqs-java-messaging-lib'//:1.0.4' TODO Commented out
    //compile group: 'com.amazonaws', name: 'aws-java-sdk-dynamodb', version: '1.11.792' TODO Commented out
    implementation group: 'com.amazonaws', name: 'aws-lambda-java-events', version: '3.6.0'//'2.2.2'
    //implementation 'com.amazonaws:aws-lambda-java-core:1.2.1' TODO Commented out
    //testImplementation 'junit:junit:4.13.1' TODO Commented out
    //implementation group: 'com.amazonaws', name: 'aws-java-sdk-sqs', version: '1.11.993' TODO Commented out

    //implementation 'org.slf4j:slf4j-api:1.7.30' TODO Commented out
    
    // https://mvnrepository.com/artifact/org.w3c/dom
    implementation group: 'org.w3c', name: 'dom', version: '2.3.0'//-jaxb-1.0.6
    
    // https://mvnrepository.com/artifact/org.json/json
    implementation group: 'org.json', name: 'json', version: '20090211'
    
    // https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk-sqs
    //implementation group: 'com.amazonaws', name: 'aws-java-sdk-sqs', version: '1.11.988'
    
    //implementation group: 'org.springframework.ws', name: 'spring-ws-core', version: '3.0.10.RELEASE' TODO Commented out
    
    // https://mvnrepository.com/artifact/com.sun.xml.messaging.saaj/saaj-impl
    implementation group: 'com.sun.xml.messaging.saaj', name: 'saaj-impl', version: '1.3'
    
    // https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-test
    //testImplementation group: 'org.springframework.boot', name: 'spring-boot-starter-test' TODO Commented out
    
    runtimeOnly 'org.jlib:jlib-awslambda-logback:1.0.0'
    testRuntimeOnly 'org.junit.platform:junit-platform-launcher'//Added to run tests in IDE

    compile "com.fasterxml.jackson.core:jackson-databind"
    compile 'xalan:xalan'
    compile 'commons-lang:commons-lang'
    compile 'net.logstash.logback:logstash-logback-encoder'
    compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.30'

    //compile 'org.apache.commons:commons-lang3:3.11' TODO Commented out
    compile 'javax.xml.bind:jaxb-api:2.3.1'
    compile 'xerces:xercesImpl:2.8.1'
    compile 'org.mvel:mvel2:2.4.11.Final'
    
    //compile 'javax.xml.bind:jaxb-api:2.3.0' TODO Commented out
    compile 'javax.activation:activation:1.1'
    //compile 'org.glassfish.jaxb:jaxb-runtime:2.3.0' TODO Commented out
    //compile "org.springframework.boot:spring-boot-starter-actuator" TODO Commented out
    //compile "org.springframework.boot:spring-boot-starter-web" TODO Commented out

     testImplementation(platform("org.junit:junit-bom:5.7.0"))
        testImplementation('org.junit.jupiter:junit-jupiter-api')
        testCompile('org.junit.jupiter:junit-jupiter-params')
        testRuntime('org.junit.jupiter:junit-jupiter-engine')
        testCompile group: 'org.mockito', name: 'mockito-inline', version: '3.2.0'
        test.useJUnitPlatform() // fix "test events not received" bug in IDEA
        testCompile 'com.willowtreeapps.assertk:assertk-jvm:0.23'
}

jar {
    manifest {
        attributes "Main-Class": "com.cam.cam.orch.handler.CamOrchFunction"
    }

    from {
        configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
    }
    from('src/main/resources') {
        include '*'
     }
}

task buildZip(type: Zip) {
    from compileJava
    from processResources
    into('lib') {
        from configurations.runtimeClasspath
    }
    doLast{
        FileTree tree = fileTree('build/distributions')
        tree.each {
            println it.name
        }
    }
}

test {

    useJUnitPlatform {
        includeEngines 'junit-jupiter', 'junit-vintage'
    }
    reports.html.enabled = false
    reports.junitXml.enabled = true
}


task testReport {
    ant.taskdef(name: 'junitreport', classname: 'org.apache.tools.ant.taskdefs.optional.junit.XMLResultAggregator', classpath: configurations.antJUnit.asPath)
    dependsOn subprojects*.test
    doFirst {
        mkdir "$buildDir/test-results"
        ant.junitreport(todir: "$buildDir/test-results") {
            subprojects.each {
                if (it.testResultsDir.exists()) {
                    fileset(dir: it.testResultsDir)
                }
            }
        }
    }
}

任何帮助都会很棒。

2 个答案:

答案 0 :(得分:1)

我建议放弃旧的 V1 API,并将其替换为适用于 Java V2 的 AWS 开发工具包。亚马逊建议使用 v2:

适用于 Java 2.x 的 AWS 开发工具包是对 1.x 版代码库的主要重写。它构建在 Java 8+ 之上,并添加了几个经常请求的功能。其中包括对非阻塞 I/O 的支持以及在运行时插入不同 HTTP 实现的能力。

适用于 Java V2 的 AWS 开发工具包与 Spring 框架配合良好。有一个教程展示了 SQS 服务和 Spring 框架的使用。但是 - 它使用 POM 文件而不是 Gradle。但是,它可能对您有所帮助。

Creating an example messaging application using the AWS SDK for Java

V1 没有像这样的端到端教程。

答案 1 :(得分:0)

对于任何有同样问题的人,我运行了 gradle 依赖项命令,发现 2 个 sdk 引用与其他引用不同。使它们都相同解决了问题。

相关问题