1

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

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

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

更新:而不是创建一个新问题,我只是要捎带这个问题。

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

@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
4

2 回答 2

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
于 2013-01-18T17:41:25.827 回答
0

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

于 2013-01-18T17:35:45.720 回答