我正在Windows Werver 2012上运行的Glassfish上构建一个带有Java客户端和java webservice的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;
}
}
在客户端上创建存根方法我使用java中的 wsimport 转换来生成从WS发出的WSDL xml中提交的所需java源文件
我注意到的是,如果我在列表中添加一个cetgory:
//...code
categories.add("Books");
categories.add("Music");
categories.add("Movies");
categories.add("Pens");
//...code
我从客户端获得更新的arraylist:书籍,音乐,电影+“钢笔”
感谢Luther
答案 0 :(得分:1)
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)来实现。有利有弊。根据您的使用情况,这可能是一个解决方案。
答案 1 :(得分:0)
实现此目的的一种方法是在单独的类中编写业务逻辑并在服务类中调用该方法。将getProductCategories()方法放入其他类并创建该类的实例并调用方法。所以您在业务类中添加新方法,无需更改wsdl或任何内容。但不要更改方法签名和参数。