2011-03-11 33 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