java.lang.AbstractMethodError:当我试图使用nexmo(vonage) API发起出站语音呼



所有相关依赖项的pom.xml。没有其他依赖项在内部使用下面的依赖项。

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.9</version>
</dependency>
<dependency>
<groupId>com.sparkjava</groupId>
<artifactId>spark-core</artifactId>
<version>2.6.0</version>
</dependency>
<dependency>
<groupId>com.vonage</groupId>
<artifactId>client</artifactId>
<version>6.0.0</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-api</artifactId>
<version>0.11.0</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-impl</artifactId>
<version>0.11.0</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-jackson</artifactId>
<version>0.11.0</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>

使用vonage SDK发起外呼的Java代码。

VonageClient client = VonageClient.builder().applicationId(APPLICATION_ID).privateKeyContents(PRIVATE_KEY).build();

Ncco ncco = new Ncco(TalkAction.builder(MESSAGE).voiceName(VOICE_TYPE).build());
CallEvent callEvent=client.getVoiceClient().createCall(newCall(TO_NUMBER,FROM_NUMBER, ncco));

执行代码时抛出异常。

. lang。AbstractMethodError:接收者类defaultjwtbuilder没有定义或继承解析方法的实现"抽象"io.jsonwebtoken.JwtBuilder signWith (java.security.Keyio.jsonwebtoken. signaturealgalgorithm)'的接口io.jsonwebtoken.JwtBuilder。jwtgenerator .generate(JwtGenerator.kt:49) ~[jwt-1.0.1.jar:?]Jwt.kt:44 ~[jwt-1.0.1.jar:?]]Jwt.kt:43 ~[jwt-1.0.1.jar:?]][jwt-1.0.1.jar:?]]com.vonage.client.auth.JWTAuthMethod.apply (JWTAuthMethod.java: 43)~ (client-6.0.0.jar: 0)com.vonage.client.AbstractMethod.applyAuth (AbstractMethod.java: 127)~ (client-6.0.0.jar: 0)com.vonage.client.AbstractMethod.execute (AbstractMethod.java: 73)~ (client-6.0.0.jar: 0)在com.vonage.client.voice.CallsEndpoint.post (CallsEndpoint.java: 57)~ (client-6.0.0.jar: 0)com.vonage.client.voice.VoiceClient.createCall (VoiceClient.java: 61)~ (client-6.0.0.jar: 0)在com.senpiper.core.listener.VoiceCallListener.listen (VoiceCallListener.java: 37)~(类/:?]在jdk.internal.reflect.Native emethodaccessorimpl .invoke0(本机方法)~[?:?]]jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java: 62)~ (?: ?]jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java: 43)~ (?: ?]java.lang.reflect.Method.invoke(Method.java:566))

问题是对

的引用
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>        
</dependency>

删除此依赖项将解决您的问题。这个包被前面的三个包所取代,它们是同一个包的模块化版本,有关详细信息,请参阅v0.10.0发行说明,下面的POM文件就足够了:

<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-api</artifactId>
<version>0.11.0</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-impl</artifactId>
<version>0.11.0</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-jackson</artifactId>
<version>0.11.0</version>
<scope>runtime</scope>
</dependency>

Vonage SDK依赖于jjwt v0.10.5,但是你的应用程序窒息的方法是在v0.10.0引入的-当参数翻转时。在处理依赖项的副本时,Maven可能有点古怪。在这种情况下,因为您显式地引用jjwt0.9.1,所以它会引入不兼容的版本。如果我必须在黑暗中拍摄,我猜对非模块化jjwt包的引用在其他依赖项之前-这就是为什么它被拉进来,而不是其他的。

无论如何-只要删除旧的jjwt包的引用-这将解决您的问题。

最新更新