2011-03-11 35 views
7

我試圖在java中使用web服務,使用從wsdl文件與wsdl2java生成的客戶端。javax.xml.ws.WebServiceException:端口{http://tempuri.org/}WSHttpBinding_IDWService找不到

我使用的Eclipse版本赫利俄斯和JDK 1.6.0_20,我已經產生使用wsld2java與選項的.class文件:

「-dc:\ WebServices的\生成-client -verbose -compile -autoNameResolution -p org.dwservice -sn DWService -wsdlLocation /WEB-INF/wsdl/DWService.wsdl c:\ WebServices \ DWService.wsdl「

我將生成的文件打包到一個.jar文件中,並將其添加到我的項目中編譯好。 但是當我嘗試使用web服務,我得到異常:

javax.xml.ws.WebServiceException: Port {http://tempuri.org/}WSHttpBinding_IDWService not found. 
at org.apache.cxf.jaxws.ServiceImpl.getPort(ServiceImpl.java:311) 
at org.apache.cxf.jaxws.ServiceImpl.getPort(ServiceImpl.java:302) 
at javax.xml.ws.Service.getPort(Service.java:92) 
at org.dwservice.DWService.getWSHttpBindingIDWService(DWService.java:63) 

這是我的代碼:

import org.dwservice.*; 
... 

private DWService dwService = new DWService(); 
private IDWService iDWService = ***dwService.getWSHttpBindingIDWService()***; 

任何想法將是非常讚賞。

+0

您的Web服務端口和WSDL是否可以使用瀏覽器進行訪問? – Pushkar 2011-03-11 10:03:24

回答

8

我知道這個帖子已經過了一年多了,但是這是一個排名很高的搜索結果。我爲後人添加了這個答案。

您的wsdl2java命令建議您的WSDL是本地的,並將其打包到Web應用程序中。我懷疑應用程序在運行時沒有找到打包的WSDL。一種選擇是將其加載爲Java資源,並通過它的位置到您的服務的構造函數:

QName qname = new QName("my.name.space", "myName"); 
URL wsdlLocation = MyServiceClient.class.getResource("/WEB-INF/wsdl/DWService.wsdl"); 

dwService = new DWService(wsdlLocation, qname); 

如果使用這種方法,仔細檢查路徑到您的WSDL。 getResource()很容易失敗,這會產生相同的錯誤。

+0

另請參見:請勿在使用wsdl2java創建客戶端時使用相對路徑,只能使用絕對路徑。所以,不是「../wsdl/x.wsdl」,而是「/usr/share/wsdl/x.wsdl」。 – 2014-09-15 08:16:26