Java:WSDL Web服务wsimport,我是否需要重新运行wsimport我更改web服务服务器中的@WebService类代码
问题描述:
我正在Windows Werver上运行的Glassfish上构建一个具有java客户端和java web服务的webservice 2012年Java:WSDL Web服务wsimport,我是否需要重新运行wsimport我更改web服务服务器中的@WebService类代码
这是我的@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;
}
}
在客户端创建我用的wsimport转换是在Java中生成所需的java源文件正在添加从存根方法由WS发布的WSDL xml。
我已经注意到的是,如果我一个cetgory添加到列表:
//...code
categories.add("Books");
categories.add("Music");
categories.add("Movies");
categories.add("Pens");
//...code
我从客户端获取更新的ArrayList:图书,音乐,电影+“笔”
- 但是如果我给che类添加一个新方法,方法对于客户端的 是不可见的,怎么回事?
- 是否因为我需要再次在WSDL文件上运行WSIMPORT并且 重新编译客户端?
- 如果以上情况属实,每次服务器端/服务器代码发生更改时,是否有避免WSIMPORT 类/源文件生成的方法?
感谢路德
答
Web服务通常用于进程间通信,因此需要用于操作该服务的强烈合同。 WSDL提供了这种合同的手段。因此,每当合同发生变化时,您都需要更新WSDL。
但是,仍然有一个选项,WSDL不是服务调用所必需的。它可以使用动态调用(https://access.redhat.com/site/documentation/en-US/JBoss_Enterprise_Application_Platform/6/html/Development_Guide/Develop_a_JAX-WS_Client_Application.html)来实现。有优点和缺点。根据您的使用情况,这可能是一个解决方案。
答
实现此目的的一种方法是将业务逻辑写入单独的类并在服务类中调用该方法。将getProductCategories()方法取出到其他类中,并创建该类的实例并调用该方法。当您在业务类中添加新方法时,不需要更改wsdl或任何其他内容。但不要更改方法签名和参数。
动态调用是否有可能通过“大幅”减慢soap通信过程来危害性能? – Luther