2011-11-16 47 views
1

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的NoSuchMethodError在mobicents SccpAddress Glassfish上

奇怪的是,我在同一組的開發機器上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。

回答

0

NoSuchMethoError有六種左右不同的原因。當您針對版本1.2進行編譯時(例如,對JAR文件進行編譯,然後針對1.1版進行編譯),並且兩個版本之間存在不兼容時,就會出現常見的問題。這可能會發生在最簡單的通話中。

稍微複雜的是一些圍繞接口的場景。有可能(通過一些古怪的路徑)爲類implement提供一個接口,它不支持所有的方法,並且在相同的代碼中使用相同的代碼(具有相同的JAR文件)沿着路徑A或路徑B會引起行爲或不行爲。這些都是需要理清的地方。

但我首先看看兩個環境中存在的JAR文件,看看它們是不同的。通常(有例外),您應該總是嘗試在編譯環境中使用最舊/最低版本的JAR文件。 (當然,這是一個問題,因爲編譯環境總是會有最新的東西。)

+0

我實際上做了大部分這些步驟,服務器上的jar文件與我在開發環境中的文件相同。 有沒有辦法查看Glassfish中哪些jar文件被訪問? –

+0

更新。我在新鮮的Glassfish 3安裝上測試了一個簡單的servlet。 這次我在創建GlobalTitle時得到了NumberDefNotFound for NumberingPlan。 這兩者之間的共同點是sccp-api-1,0,0,CR1.jar庫,這些庫可在{DOMAIN}/lib和lib/applibs目錄中的應用程序中使用。 –

0

僅供參考:由第三方提供的舊jar包包含一些早期版本的mobicents類,包括那些誰給了我這些問題。

這是造成麻煩的原因。我認爲這個案子已經結束,但是仍然要感謝Daniel R Hicks,因爲畢竟它是正確的。