Java:WSDL web服务wsimport,我是否需要重新运行wsimport以更改WebService服务器中的@WebService类代码

Java:WSDL web服务wsimport,我是否需要重新运行wsimport以更改WebService服务器中的@WebService类代码,java,web-services,wsdl,glassfish,wsimport,Java,Web Services,Wsdl,Glassfish,Wsimport,我正在用一个java客户端和一个运行在Windows Werver 2012上的Glassfish上的java Web服务构建一个Web服务 这是我的@WebService类: import java.util.ArrayList; import java.util.List; import javax.jws.WebService; @WebService public class ProductCatalog { public List<String> getPro

我正在用一个java客户端和一个运行在Windows Werver 2012上的Glassfish上的java Web服务构建一个Web服务

这是我的@WebService类:

import java.util.ArrayList;
import java.util.List;

import javax.jws.WebService;

@WebService
public class ProductCatalog {

    public List<String> getProductCategories(){
     List<String> categories = new ArrayList<>();
     categories.add("Books");
     categories.add("Music");
     categories.add("Movies");

     return categories;
   }
}
我从客户端获得更新的arraylist:书籍、音乐、电影+笔

  • 但是,如果我向che类添加一个新方法,该方法对于 客户方面,为什么
  • 是不是因为我需要在WSDL文件上再次运行WSIMPORT 重新编译客户端
  • 如果上述情况属实,有没有办法避免WSIMPORT 类/源文件生成,每次 服务器端/Web服务代码

感谢Luther

Web服务通常用于进程间通信,因此需要一个强大的契约来运行服务。WSDL提供了这样一种契约的方法。因此,每次合同发生变化时,您都需要更新WSDL


然而,仍然有一个选项,服务调用不需要WSDL。它可以使用动态调用()实现。有利有弊。根据您的用例,这可能是一个解决方案

实现这一点的一种方法是在单独的类中编写业务逻辑,并在服务类中调用该方法。将getProductCategories()方法取出到另一个类中,创建该类的实例并调用该方法。因此,当您在业务类中添加新方法时,无需更改wsdl或其他任何内容。但不要更改方法签名和参数。

动态调用是否可能会通过“大幅”减慢soap通信过程而影响性能?
     //...code
     categories.add("Books");
 categories.add("Music");
 categories.add("Movies");
 categories.add("Pens");
     //...code