org.apache.catalina.LifecycleException: org.apache.catalina.LifecycleException: java.lang.NoSuchMethodError: org.mobicents.protocols.ss7.sccp.parameter.SccpAddress.<init>(Lorg/mobicents/protocols/ss7/indicator/RoutingIndicator;ILorg/mobicents/protocols/ss7/sccp/parameter/GlobalTitle;I)V
奇怪的是,我在开发机器上的同一套Mobicents协议JAR库上运行,但是在服务器上却收到了。
导致问题的行是:
SccpAddress localAddress = new SccpAddress(RoutingIndicator.ROUTING_BASED_ON_DPC_AND_SSN, Controller.LOCAL_SPC, localGT, Controller.SSN_CAP);
并且非常类似于在他们的测试用例中使用的那个。当我逐字尝试该行时,我也收到相同的错误。
当我尝试在有效的字节数组中使用
SccpAddressCodec
中的解码方法时,收到相同的错误。我正在使用Mobicents SS7协议栈的1.0.0.CR1版本。
最佳答案
NoSuchMethoError
有六种左右不同的原因。当您针对1.2版本(例如JAR文件)进行编译但随后针对1.1版本运行时,会出现一种常见的情况,并且这两个版本之间存在不兼容性。这可以通过最简单的调用来实现。
围绕接口的一些场景稍微复杂一些。一个类可能会(通过一些奇怪的路径)进入一个不支持其所有方法的接口,而implement
一个接口在同一代码(具有相同的JAR文件)中沿路径A或路径B前进可能会引起该行为。或不。这些都是理智的熊。
但是我首先要看一下两种环境中存在的JAR文件,看看它们是否不同。通常(有例外),您应始终尝试在编译环境中使用最早/最低版本的JAR文件。 (当然,这是一个问题,因为编译环境总是倾向于拥有最新的东西。)