繁体   English   中英

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

[英]Java: WSDL web service wsimport, do I need to re-run wsimport of I change the @WebService class code in the webservice server

我正在使用Windows Werver 2012上运行的Glassfish在Java客户端和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;
   }
}

客户端创建存根方法时,我使用java中的wsimport转换来生成所需的java源文件,这些源文件来自WS发行的WSDL xml。

我注意到的是,如果我在列表中添加一个类别,则:

     //...code
     categories.add("Books");
 categories.add("Music");
 categories.add("Movies");
 categories.add("Pens");
     //...code

我从客户端获取了更新的数组列表:书,音乐,电影和“笔”

  • 但是,如果我向che类添加新方法,则该方法对客户端不可见,怎么办?
  • 是因为我需要在WSDL文件上再次运行WSIMPORT并重新编译客户端吗?
  • 如果上述情况成立,那么每次在Serverside / webservice代码中进行更改时,是否有办法避免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或其他任何内容。但是请勿更改方法签名和参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM