【问题标题】:Generate Wsdl/Client Stubs For Web Service为 Web 服务生成 Wsdl/客户端存根
【发布时间】:2013-01-02 11:11:49
【问题描述】:

我一直在阅读有关使用 Java、Eclipse 等进行 Web 服务编程的一些资料,我发现了一个特定的示例,其中该人通过执行以下操作创建了 Web 服务和客户端:

  1. 定义Web服务java类(接口+实现)
  2. 部署使用Endpoint.publish的网络服务
  3. 从 Web 服务的 url 中获取 wsdl(例如,localhost://greeting?wsdl)
  4. 使用 wsimport 生成存根
  5. 使用生成的存根创建客户端类

是否有另一种方法可以生成 wsdl 而无需发布 Web 服务并下载它?也许是一个自动生成 wsdl 和客户端存根的 maven 插件?

更新:我不会创建一个新问题,而是要背负这个问题。

我通过定义一个接口创建了我的网络服务:

@WebService
public interface HelloWorldWs {
    @WebMethod
    public String sayHello(String name);
}

还有一个 impl 类:

@WebService(endpointInterface = "com.me.helloworldws.HelloWorldWs")
public class HelloWorldWsImpl implements HelloWorldWs {
    @Override
    @WebMethod
    public String sayHello(String name) {
        return "Hello World Ws, " + name;
    }
}

当我运行 wsgen 时,我收到以下错误:

The @javax.jws.WebMethod annotation cannot be used in with @javax.jws.WebService.endpointInterface element.

Eclipse 似乎没问题。

知道为什么吗?

注意,我最初没有注释,但是当我尝试调用我的 web 服务时,出现以下错误:

com.me.helloworldws.HelloWorldWsImpl is not an interface

【问题讨论】:

  • 我正在学习 Java 中的 Web 服务,我正在寻找上面的示例 where the person created the web .. bla bla。你能把那个例子的链接发给我吗,这对我理解网络服务很有帮助

标签: java web-services wsdl wsimport


【解决方案1】:

JSR 224 在 3.1 部分中说:

SEI 是符合以下所有标准的 Java 接口:

  • 它的任何方法都可以带有javax.jws.WebMethod 注释(参见7.11.2)。
  • javax.jws.WebMethod 如果使用,则不得将 exclude 元素设置为 true

如果实现类包含javax.jws.WebMethod,那么你不能放@WebMethod(exclude=true),根据规范,这是不可能的。

取决于 Eclipse 的自定义版本,对此显示警告。例如Rational Application Developer for Websphere 展示:

JSR-181, 3.1: WebMethod cannot be used with the endpointInterface 
              property of WebService

【讨论】:

  • 已经做到了! :) 我什至创建了复杂的批处理文件来做我需要的 wsgen/wsimport 东西。我只是希望有像 maven 插件这样的东西可以为我完成所有这些工作。
  • Curious.. 我为我的 web 服务创建了一个接口,然后创建了一个 impl 类,并使用 @WebService(endpointInterface = "com.cookmv.helloworldws.HelloWorldWs") 注释了 impl 类。 Wsgen 抱怨使用 enpointInterface。知道为什么吗?
  • JAX-WS 运行时使用 o 不使用注解,如 Websphere 中的 Axis2 没有取名。
  • 您能详细说明一下吗?如果它不使用注解它使用什么?
【解决方案2】:

通常在编程/构建项目时(使用一些高级 IDE),您应该能够在自动生成的内容之间找到它 - IDE 应该会生成它。请仔细检查。

【讨论】:

  • 如果您没有找到它(这不太可能)尝试创建一个测试 Web 服务客户端,IDE 通常会让您这样做。它应该在那里(在测试客户端文件之间)
猜你喜欢
  • 2015-09-09
  • 1970-01-01
  • 2014-03-19
  • 2011-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多