Skip to content

[CXF] DynamicClient 的 ClassNotFoundException 問題解法

一月 22, 2009

我真的覺得我在惡搞… = =

先來解說一下任務內容︰對方會提供 WSDL 位址,於是要刻一隻程式來解析 WSDL 的內容,抓取出其中 service 的 operation list 與所需要帶的參數,比較完整的做法會像是 WSDL2Java 來幫忙產生實際的 Java code,然後自己再手動剪剪貼貼程式碼以符合真實的狀況,最後用這段程式碼去呼叫 Service。不過這樣做實在是太苦了,Apache CXF 有提供一懶人包叫 Dynamic Client,只需要把 WSDL 內容餵進去,它便會在 runtime 的時候產生對應的程式碼出來,然後用 invoke() 把要執行的 operation 名稱與參數值帶進去就可以了,很 easy。

任務過程︰一開始我在 Local 測試 Dynamic Client 效果很好,完全符合我的需求,所以很高興地趕快把程式補到 Servlet 上,結果在 JaxWsDynamicClientFactory 要跑 newInstance() 時竟然掛點,吐出 ClassNotFoundException 的例外訊息給我,但明明 Libraries 裡可以看到 org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory 是存在的,只好 google 找看看有沒有解法。

最後找到有人遇到跟我一樣的問題 (是的,我跟他一樣都是 Beginner),於是跟著照做 ContextClassLoader 這段︰


ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
JaxWsDynamicClientFactory dcFactory =JaxWsDynamicClientFactory.newInstance();
this.dClient = dcFactory.createClient(this.wsdlStr, classLoader);

但還是無用,只好開始亂翻 Project Properties 看有什麼地方可以設定的,有翻還真的有保佑,在 Java EE Module Dependencies 的地方把 CXF Module 勾選起來,重新跑一次 Servlet,竟然成功了….

我只能說一切都是在亂搞的過程結束任務的。

廣告
No comments yet

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s

%d 位部落客按了讚: