我有一个用于在服务器上创建Web服务端点的模型。客户端使用相同的模型。但是,当向服务器添加新操作但客户端仍使用旧模型时,服务创建将失败,并出现如下例外情况(为清晰起见,添加了换行符):
Exception in thread "main" javax.xml.ws.WebServiceException:
Method someNewMethod is exposed as WebMethod, but there is no
corresponding wsdl operation with name someNewMethod in the
wsdl:portType{http://example.com}MyService
我理解这个问题,但有可能忽略这个吗?我希望在使用Web服务时能够向后兼容。只要添加方法,这应该在大多数情况下都能正常工作。
问题出现在getPort
方法中:
Service s = Service.create(
new URL("http://example.com/foo?wsdl"),
new QName("http://example.com", "MyService"));
MyService m = s.getPort(MyService.class);
答案 0 :(得分:1)
仅供参考。 您还可以使用
注释方法@WebMethod(exclude=true)
这将确保与wsdl进行比较时忽略该方法。
答案 1 :(得分:0)
使用本地WSDL文件:
客户端App具有服务的本地WSDL文件,例如在jar文件中。
你得到它
URL wsdlURL = this.getClass().getClassLoader()
.getResource("MyWebService.wsdl");
这适用于我写的应用程序。服务器稍后扩展了另一个WSDL属性,而客户端仍然使用本地属性。
答案 2 :(得分:0)
我刚删除了Web服务引用,并使用该界面再次创建。
答案 3 :(得分:0)
您的Service类包含一个带有本地wsdl文件变量的静态构造函数。检查本地wsdl文件是否包含 someNewMethod 。如果没有从原始Url下载wsdl文件并保存到本地。 wsdl末尾的soap地址位置值也很重要。 有时https转为http。