最後在學習WebService時,看到對于官方的例子是這樣寫的.
1 2 3 4 5 6 7 | |
注意看上面的PORT_NAME的定義,是一個QName,其就有namespaceURI和一個name值,而在使用serivce擷取port時直接傳遞了接口名參數。
這樣的例子是可以運作的,這就導緻了本人在編寫參考例子時,直接Copy了相應的代碼,但是修改了各項名稱,在運作時,即始終運作不起來,相應的錯誤為
1 | |
以上的錯誤直接讓人找不到方向,而實際問題是,service根據所傳遞的資訊,在隻傳遞了接口資訊時,會預設建構一個QName的資訊,再從service中尋找,如果尋找不到,自然就會産生上面的錯誤了。
在官方的例子中,它會預設建構HelloWorldPort這樣qname去尋找,而在進行service.add時,恰好添加的就是HelloWorldPort這個qname,那麼就恰好尋找到了。
而我們的例子,由于做了很多處理,導緻預設添加到service的port的name并不是Service.class.getName+Port的組合,那麼自然就找不到相應的port了。而正确的做法,其實也很簡單,就是在擷取port的時候,手動地指定要擷取port類的qname,如下所示:
1 2 3 | |
即在往service時添加什麼樣的port,那麼在擷取時就使用什麼樣的qname。再一步了解,addPort這個方法就可以了解為以鍵值對的方式往service裡追加port,那麼在擷取的時候自然就要提供相應的key值了。如果不提供,就會使用預設的生成政策建立一個key值,那這個key值與addPort使用的key值不一樣的話,自然就會産生上面的錯誤了。
轉自http://www.iflym.com/index.php/code/201210230001.html