简体   繁体   English

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

[英]AWS SQS Send Message java.lang.NoSuchFieldError: CLIENT_ENDPOINT

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)

I'm relatively new to gradle.我对 gradle 比较陌生。 I am sending a message to an AWS SQS Dead letter queue.我正在向 AWS SQS 死信队列发送消息。 I keep getting the error above.我不断收到上面的错误。 The same class first attempts to pass the message to another queue based on a filter and if that is unsuccessful the message is sent to the dlq.相同的 class 首先尝试基于过滤器将消息传递到另一个队列,如果不成功,则将消息发送到 dlq。 I've tested the happy path and it works.我已经测试了快乐的道路并且它有效。 The error string is generated but sending the message to the dlq doesn't work.生成了错误字符串,但将消息发送到 dlq 不起作用。 I've read that this is most commonly a conflict with sdk's but I haven't been able to resolve it.我读过这通常是与 sdk 的冲突,但我无法解决它。 This is my build.gradle file:这是我的 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)
                }
            }
        }
    }
}

Any help would be great.任何帮助都会很棒。

I would recommend moving away from the Old V1 API and replace it with the AWS SDK for Java V2.我建议从旧的 V1 API 移开,并将其替换为 AWS SDK for Java V2。 Amazon recommends using v2:亚马逊推荐使用 v2:

The AWS SDK for Java 2.x is a major rewrite of the version 1.x code base.适用于 Java 2.x 的 AWS SDK 是对 1.x 版代码库的重大改写。 It's built on top of Java 8+ and adds several frequently requested features.它建立在 Java 8+ 之上,并添加了几个经常请求的功能。 These include support for non-blocking I/O and the ability to plug in a different HTTP implementation at run time.其中包括对非阻塞 I/O 的支持以及在运行时插入不同的 HTTP 实现的能力。

The AWS SDK for Java V2 works fine with the Spring framework.适用于 Java V2 的 AWS SDK 与 Spring 框架配合良好。 There is a tutorial that shows use of the SQS service and Spring Framework.有一个教程显示了 SQS 服务和 Spring 框架的使用。 However - it uses a POM file not Gradle.但是 - 它使用 POM 文件而不是 Gradle。 However, it may help you.但是,它可能会对您有所帮助。

Creating an example messaging application using the AWS SDK for Java 使用 AWS SDK 为 Java 创建示例消息传递应用程序

There are no end to end tutorials like this one for V1. V1 没有像这样的端到端教程。

For anyone who has the same issue I ran the command gradle dependencies and found that 2 sdk references were different than the rest.对于遇到相同问题的任何人,我运行命令 gradle 依赖项并发现 2 个 sdk 引用与 rest 不同。 Making them all the same resolved the issue.让它们都一样解决了这个问题。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM