Java 忽略JAX-WS客户端中缺少的方法

Java 忽略JAX-WS客户端中缺少的方法,java,soap,jax-ws,Java,Soap,Jax Ws,我有一个用于在服务器上创建Web服务端点的模型。客户机使用相同的模型。但是,当向服务器添加新操作但客户端仍使用旧模型时,服务创建会失败,出现如下异常(为清楚起见添加了换行符): 我理解这个问题,但是否可以忽略这一点?我希望在使用Web服务时向后兼容。只要只添加了一些方法,大多数情况下都会很好 问题出现在getPort方法中: Service s = Service.create( new URL("http://example.com/foo?wsdl"), new QName(

我有一个用于在服务器上创建Web服务端点的模型。客户机使用相同的模型。但是,当向服务器添加新操作但客户端仍使用旧模型时,服务创建会失败,出现如下异常(为清楚起见添加了换行符):

我理解这个问题,但是否可以忽略这一点?我希望在使用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);

使用本地WSDL文件:
客户端应用程序具有服务的本地WSDL文件,例如在jar文件中

这是你得到的

URL wsdlURL = this.getClass().getClassLoader()
                .getResource("MyWebService.wsdl");

这对我编写的应用程序有效。服务器后来扩展了一个额外的WSDL属性,而客户端仍然使用本地属性。

我刚刚删除了webservice引用,并使用接口再次创建。

仅供参考。 还可以使用注释对方法进行注释

@WebMethod(exclude=true)

这将确保在与wsdl进行比较时忽略该方法

您的服务类包含一个带有本地wsdl文件变量的静态构造函数。检查本地wsdl文件是否具有someNewMethod。如果没有,请从原始Url下载wsdl文件并保存到本地。 wsdl末尾的soap地址位置值也很重要。
有时https会变成http

您正在使用什么web服务库?许多包实现JAX-WS。例如,CXF不会这样做。@b我们使用Oracle的jaxws RI。您是使用WSDL中端点的地址,还是在获取端口实例后在运行时进行设置?@Nathan WSDL包含端口的位置。除了WSDL本身之外,我没有手动设置任何地址。您可以尝试在本地添加WSDL的副本,并将wsdlLocation设置为该本地副本。您遇到的可能是构造函数在创建端口之前从wsdlLocation加载wsdl。您可能应该在本地副本中放置端点的假地址(如urn:none或其他),以查看它是否从实时副本中拾取端点地址,但从本地副本验证操作。否则,如果您真的不需要从wsdl获取端点地址,那么本地副本和手动设置端点url将起作用。WSDL由JAX-WS生成,并拆分为多个WSDL和模式文件(因为JAX-WS就是这样运行的)。我猜这些必须合并,否则查找
schemaLocation
失败。生成的模式文件源代码当然保留在客户端中。只需要模式保持兼容,并且在服务器WSDLUpdated应答中将新字段和方法标记为可选(我认为是默认值),在我的情况下,这是一个更改属性,而不是一个方法。这对我来说很有效,谢谢。。。我将Weblogic 12.2.1.3与Java 8和Spring Boot 1.5.15结合使用
@WebMethod(exclude=true)