【问题标题】:Java: WSDL web service wsimport, do I need to re-run wsimport of I change the @WebService class code in the webservice serverJava: WSDL web service wsimport, 是否需要重新运行 wsimport 我在 webservice 服务器中更改@WebService 类代码
【发布时间】:2013-07-18 09:40:35
【问题描述】:

我正在 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转换来生成来自WS发出的WSDL xml所需的java源文件.

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

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

我从客户端获取更新后的数组列表:Book,Music,Movie + "Pens"

  • 但如果我向 che 类添加新方法,则该方法对 客户端,怎么来的?
  • 是因为我需要再次对 WSDL 文件运行 WSIMPORT 并且 重新编译客户端?
  • 如果上述情况属实,有没有办法避免 WSIMPORT 每次发生变化时生成类/源文件 服务器端/网络服务代码?

感谢路德

【问题讨论】:

    标签: java web-services wsdl glassfish wsimport


    【解决方案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) 来实现。有优点也有缺点。根据您的用例,这可能是一个解决方案。

    【讨论】:

    • 动态调用是否会通过“显着”减慢soap通信过程来影响性能?
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多